<div dir="ltr">Could we disable the GCC warning and keep Clang's that doesn't have this false positive?<br><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 15, 2017 at 2:14 PM Reid Kleckner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">GTest actually uses this crazy braceless switch/default pattern to suppress these warnings:<div><br></div><div><div>// The GNU compiler emits a warning if nested "if" statements are followed by</div><div>// an "else" statement and braces are not used to explicitly disambiguate the</div><div>// "else" binding.  This leads to problems with code like:</div><div>//</div><div>//   if (gate)</div><div>//     ASSERT_*(condition) << "Some message";</div><div>//</div><div>// The "switch (0) case 0:" idiom is used to suppress this.</div><div>#ifdef __INTEL_COMPILER</div><div># define GTEST_AMBIGUOUS_ELSE_BLOCKER_</div><div>#else</div><div># define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default:  // NOLINT</div><div>#endif</div><div><br></div></div><div>It sounds like you are compiling with a new version of GCC for which this idiom doesn't suppress the warning.</div><div><br>Could you please file a bug with gtest with your gcc version to investigate and work around these warnings?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 15, 2017 at 2:00 PM, Galina Kistanova via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: gkistanova<br>
Date: Thu Jun 15 16:00:40 2017<br>
New Revision: 305506<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=305506&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=305506&view=rev</a><br>
Log:<br>
Added braces to work around gcc warning in googletest: suggest explicit braces to avoid ambiguous 'else'. NFC.<br>
<br>
Modified:<br>
    llvm/trunk/unittests/ADT/SCCIteratorTest.cpp<br>
    llvm/trunk/unittests/ADT/StringRefTest.cpp<br>
    llvm/trunk/unittests/CodeGen/LowLevelTypeTest.cpp<br>
    llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
    llvm/trunk/unittests/Support/CommandLineTest.cpp<br>
<br>
Modified: llvm/trunk/unittests/ADT/SCCIteratorTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/SCCIteratorTest.cpp?rev=305506&r1=305505&r2=305506&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/SCCIteratorTest.cpp?rev=305506&r1=305505&r2=305506&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/ADT/SCCIteratorTest.cpp (original)<br>
+++ llvm/trunk/unittests/ADT/SCCIteratorTest.cpp Thu Jun 15 16:00:40 2017<br>
@@ -63,8 +63,9 @@ TEST(SCCIteratorTest, AllSmallGraphs) {<br>
       // Check that every node in the SCC is reachable from every other node in<br>
       // the SCC.<br>
       for (unsigned i = 0; i != NUM_NODES; ++i)<br>
-        if (NodesInThisSCC.count(i))<br>
+        if (NodesInThisSCC.count(i)) {<br>
           EXPECT_TRUE(NodesInThisSCC.isSubsetOf(G.NodesReachableFrom(i)));<br>
+        }<br>
<br>
       // OK, now that we now that every node in the SCC is reachable from every<br>
       // other, this means that the set of nodes reachable from any node in the<br>
@@ -78,8 +79,9 @@ TEST(SCCIteratorTest, AllSmallGraphs) {<br>
             NodesReachableFromSCC.Meet(NodesInThisSCC.Complement());<br>
<br>
           for (unsigned j = 0; j != NUM_NODES; ++j)<br>
-            if (ReachableButNotInSCC.count(j))<br>
+            if (ReachableButNotInSCC.count(j)) {<br>
               EXPECT_TRUE(G.NodesReachableFrom(j).Meet(NodesInThisSCC).isEmpty());<br>
+            }<br>
<br>
           // The result must be the same for all other nodes in this SCC, so<br>
           // there is no point in checking them.<br>
<br>
Modified: llvm/trunk/unittests/ADT/StringRefTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringRefTest.cpp?rev=305506&r1=305505&r2=305506&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringRefTest.cpp?rev=305506&r1=305505&r2=305506&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/ADT/StringRefTest.cpp (original)<br>
+++ llvm/trunk/unittests/ADT/StringRefTest.cpp Thu Jun 15 16:00:40 2017<br>
@@ -882,8 +882,9 @@ TEST(StringRefTest, getAsDouble) {<br>
     double Result;<br>
     StringRef S(Entry.Str);<br>
     EXPECT_EQ(Entry.ShouldFail, S.getAsDouble(Result, Entry.AllowInexact));<br>
-    if (!Entry.ShouldFail)<br>
+    if (!Entry.ShouldFail) {<br>
       EXPECT_EQ(Result, Entry.D);<br>
+    }<br>
   }<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/unittests/CodeGen/LowLevelTypeTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/CodeGen/LowLevelTypeTest.cpp?rev=305506&r1=305505&r2=305506&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/CodeGen/LowLevelTypeTest.cpp?rev=305506&r1=305505&r2=305506&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/CodeGen/LowLevelTypeTest.cpp (original)<br>
+++ llvm/trunk/unittests/CodeGen/LowLevelTypeTest.cpp Thu Jun 15 16:00:40 2017<br>
@@ -137,8 +137,9 @@ TEST(LowLevelTypeTest, Vector) {<br>
       if ((Elts % 2) == 0) {<br>
         EXPECT_EQ(S * (Elts / 2), HalfEltIfEvenTy.getSizeInBits());<br>
         EXPECT_EQ(S, HalfEltIfEvenTy.getScalarSizeInBits());<br>
-        if (Elts > 2)<br>
+        if (Elts > 2) {<br>
           EXPECT_EQ(Elts / 2, HalfEltIfEvenTy.getNumElements());<br>
+        }<br>
       }<br>
<br>
       EXPECT_EQ(S * (Elts * 2), DoubleEltTy.getSizeInBits());<br>
<br>
Modified: llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp?rev=305506&r1=305505&r2=305506&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp?rev=305506&r1=305505&r2=305506&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp (original)<br>
+++ llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp Thu Jun 15 16:00:40 2017<br>
@@ -311,8 +311,9 @@ void TestAllForms() {<br>
   EXPECT_EQ(Data2, toReference(DieDG.find(Attr_DW_FORM_ref2), 0));<br>
   EXPECT_EQ(Data4, toReference(DieDG.find(Attr_DW_FORM_ref4), 0));<br>
   EXPECT_EQ(Data8, toReference(DieDG.find(Attr_DW_FORM_ref8), 0));<br>
-  if (Version >= 4)<br>
+  if (Version >= 4) {<br>
     EXPECT_EQ(Data8_2, toReference(DieDG.find(Attr_DW_FORM_ref_sig8), 0));<br>
+  }<br>
   EXPECT_EQ(UData[0], toReference(DieDG.find(Attr_DW_FORM_ref_udata), 0));<br>
<br>
   //----------------------------------------------------------------------<br>
@@ -320,15 +321,17 @@ void TestAllForms() {<br>
   //----------------------------------------------------------------------<br>
   EXPECT_EQ(1ULL, toUnsigned(DieDG.find(Attr_DW_FORM_flag_true), 0));<br>
   EXPECT_EQ(0ULL, toUnsigned(DieDG.find(Attr_DW_FORM_flag_false), 1));<br>
-  if (Version >= 4)<br>
+  if (Version >= 4) {<br>
     EXPECT_EQ(1ULL, toUnsigned(DieDG.find(Attr_DW_FORM_flag_present), 0));<br>
+  }<br>
<br>
   //----------------------------------------------------------------------<br>
   // Test SLEB128 based forms<br>
   //----------------------------------------------------------------------<br>
   EXPECT_EQ(SData, toSigned(DieDG.find(Attr_DW_FORM_sdata), 0));<br>
-  if (Version >= 5)<br>
+  if (Version >= 5) {<br>
     EXPECT_EQ(ICSData, toSigned(DieDG.find(Attr_DW_FORM_implicit_const), 0));<br>
+  }<br>
<br>
   //----------------------------------------------------------------------<br>
   // Test ULEB128 based forms<br>
@@ -340,9 +343,10 @@ void TestAllForms() {<br>
   //----------------------------------------------------------------------<br>
   EXPECT_EQ(Dwarf32Values[0],<br>
             toReference(DieDG.find(Attr_DW_FORM_GNU_ref_alt), 0));<br>
-  if (Version >= 4)<br>
+  if (Version >= 4) {<br>
     EXPECT_EQ(Dwarf32Values[1],<br>
               toSectionOffset(DieDG.find(Attr_DW_FORM_sec_offset), 0));<br>
+  }<br>
<br>
   //----------------------------------------------------------------------<br>
   // Add an address at the end to make sure we can decode this value<br>
<br>
Modified: llvm/trunk/unittests/Support/CommandLineTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/CommandLineTest.cpp?rev=305506&r1=305505&r2=305506&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/CommandLineTest.cpp?rev=305506&r1=305505&r2=305506&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/Support/CommandLineTest.cpp (original)<br>
+++ llvm/trunk/unittests/Support/CommandLineTest.cpp Thu Jun 15 16:00:40 2017<br>
@@ -180,8 +180,9 @@ void testCommandLineTokenizer(ParserFunc<br>
   parse(Input, Saver, Actual, /*MarkEOLs=*/false);<br>
   EXPECT_EQ(OutputSize, Actual.size());<br>
   for (unsigned I = 0, E = Actual.size(); I != E; ++I) {<br>
-    if (I < OutputSize)<br>
+    if (I < OutputSize) {<br>
       EXPECT_STREQ(Output[I], Actual[I]);<br>
+    }<br>
   }<br>
 }<br>
<br>
@@ -528,8 +529,9 @@ TEST(CommandLineTest, GetRegisteredSubco<br>
   EXPECT_FALSE(Opt1);<br>
   EXPECT_FALSE(Opt2);<br>
   for (auto *S : cl::getRegisteredSubcommands()) {<br>
-    if (*S)<br>
+    if (*S) {<br>
       EXPECT_EQ("sc1", S->getName());<br>
+    }<br>
   }<br>
<br>
   cl::ResetAllOptionOccurrences();<br>
@@ -538,8 +540,9 @@ TEST(CommandLineTest, GetRegisteredSubco<br>
   EXPECT_FALSE(Opt1);<br>
   EXPECT_FALSE(Opt2);<br>
   for (auto *S : cl::getRegisteredSubcommands()) {<br>
-    if (*S)<br>
+    if (*S) {<br>
       EXPECT_EQ("sc2", S->getName());<br>
+    }<br>
   }<br>
 }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>