On Sunday, October 27, 2024 2:16:20 A.M. CDT Andrey Rakhmatullin wrote:
> On Sat, Oct 26, 2024 at 04:29:17PM -0500, Steven Robbins wrote:
> > Hello,
> > 
> > On Saturday, October 26, 2024 2:20:05 P.M. CDT Andrey Rakhmatullin wrote:
> > > Control: reassign -1 libgtest-dev 1.15.2-1
> > > Control: affects -1 libmsgsl-dev
> > > 
> > > That macro in libgtest-dev indeed contains a switch statement without a
> > > default label, reassigning.
> > 
> > The code in question is test code written for libmsgsl-dev, that is
> > compiled using options that produce an error if a switch statement lacks
> > a default label.  Is that correct?
> 
> The code in question is the GTEST_DEATH_TEST_ macro defined in
> /usr/include/gtest/internal/gtest-death-test-internal.h , test code
> written for libmsgsl-dev just has EXPECT_DEATH() calls.
> 
> The code is compiled like this:
> /usr/bin/clang++  -isystem
> /tmp/autopkgtest.lG90Bd/build.QNu/src/tests/googletest/googletest/include
> -std=c++20 -stdlib=libc++ -O3 -DNDEBUG -fno-strict-aliasing -Wall
> -Wcast-align -Wconversion -Wctor-dtor-privacy -Werror -Wextra -Wpedantic
> -Wshadow -Wsign-conversion -Wno-deprecated-declarations -Weverything
> -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-missing-braces
> -Wno-covered-switch-default -Wno-global-constructors
> -Wno-missing-prototypes -Wno-padded -Wno-unknown-attributes
> -Wno-used-but-marked-unused -Wno-weak-vtables -Wno-unsafe-buffer-usage -MD
> -MT CMakeFiles/gsl_tests.dir/string_span_tests.cpp.o -MF
> CMakeFiles/gsl_tests.dir/string_span_tests.cpp.o.d -o
> CMakeFiles/gsl_tests.dir/string_span_tests.cpp.o -c
> /tmp/autopkgtest.lG90Bd/build.QNu/src/tests/string_span_tests.cpp so it
> looks like -Wswitch-default is enabled by default in the compiler.
> 
> I may be very wrong but to me it looks like the gtest macro needs changes.

I reproduced the issue using the attached source code.  It compiles fine using 
the command "clang -c death-test.cc".  It even compiles fine using "... -Werror 
-Wall -Wpedantic".

It does fail using all the switches you cite above:

$ clang -c death-test.cc  -Wall -Wcast-align -Wconversion -Wctor-dtor-privacy 
-Werror -Wextra -Wpedantic -Wshadow -Wsign-conversion -Wno-deprecated-
declarations -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-
missing-braces -Wno-covered-switch-default -Wno-global-constructors -Wno-
missing-prototypes -Wno-padded -Wno-unknown-attributes -Wno-used-but-marked-
unused -Wno-weak-vtables -Wno-unsafe-buffer-usage
death-test.cc:21:5: error: 'switch' missing 'default' label [-Werror,-Wswitch-
default]
   21 |     ASSERT_DEATH(ThisShouldDie(), "");
      |     ^
/usr/include/gtest/gtest-death-test.h:185:3: note: expanded from macro 
'ASSERT_DEATH'
  185 |   ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, 
matcher)
      |   ^
/usr/include/gtest/gtest-death-test.h:174:3: note: expanded from macro 
'ASSERT_EXIT'
  174 |   GTEST_DEATH_TEST_(statement, predicate, matcher, 
GTEST_FATAL_FAILURE_)
      |   ^
/usr/include/gtest/internal/gtest-death-test-internal.h:233:7: note: expanded 
from macro 'GTEST_DEATH_TEST_'
  233 |       switch (gtest_dt->AssumeRole()) {                                 
       
\
      |       ^
1 error generated.


Certainly it would be nice to have C++ code build clean with every variation 
of compiler switches.  But does that rise to the level of a *release critical* 
bug?  Is there a rule - written or unwritten - that leads one to that 
conclusion?

Regards,
-Steve
#include <gtest/gtest.h>


class FooTest : public testing::Test 
{
protected:
    void ThisShouldDie()
    {
        
    }
};

using FooDeathTest = FooTest;

TEST_F(FooTest, DoesThis) {
  // normal test
}

TEST_F(FooDeathTest, DoesThat) 
{
    ASSERT_DEATH(ThisShouldDie(), "");
}

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to