r204776 - Add existing warnings to -Waddress so that it works closer to what GCC has.

Richard Trieu rtrieu at google.com
Tue Mar 25 18:55:34 PDT 2014


Author: rtrieu
Date: Tue Mar 25 20:55:33 2014
New Revision: 204776

URL: http://llvm.org/viewvc/llvm-project?rev=204776&view=rev
Log:
Add existing warnings to -Waddress so that it works closer to what GCC has.
Previously, -Waddress was empty.

Fixes PR9043.

Added:
    cfe/trunk/test/SemaCXX/warn-address.cpp
Modified:
    cfe/trunk/include/clang/Basic/DiagnosticGroups.td
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td

Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=204776&r1=204775&r2=204776&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Tue Mar 25 20:55:33 2014
@@ -19,7 +19,6 @@ def Implicit : DiagGroup<"implicit", [
 // Empty DiagGroups are recognized by clang but ignored.
 def : DiagGroup<"abi">;
 def AbsoluteValue : DiagGroup<"absolute-value">;
-def : DiagGroup<"address">;
 def AddressOfTemporary : DiagGroup<"address-of-temporary">;
 def : DiagGroup<"aggregate-return">;
 def GNUAlignofExpression : DiagGroup<"gnu-alignof-expression">;
@@ -38,7 +37,8 @@ def ConstantConversion :
 def LiteralConversion : DiagGroup<"literal-conversion">;
 def StringConversion : DiagGroup<"string-conversion">;
 def SignConversion : DiagGroup<"sign-conversion">;
-def BoolConversion : DiagGroup<"bool-conversion">;
+def PointerBoolConversion : DiagGroup<"pointer-bool-conversion">;
+def BoolConversion : DiagGroup<"bool-conversion", [ PointerBoolConversion ] >;
 def IntConversion : DiagGroup<"int-conversion">;
 def EnumConversion : DiagGroup<"enum-conversion">;
 def EnumTooLarge : DiagGroup<"enum-too-large">;
@@ -284,6 +284,7 @@ def StaticLocalInInline : DiagGroup<"sta
 def GNUStaticFloatInit : DiagGroup<"gnu-static-float-init">;
 def StaticFloatInit : DiagGroup<"static-float-init", [GNUStaticFloatInit]>;
 def GNUStatementExpression : DiagGroup<"gnu-statement-expression">;
+def StringCompare : DiagGroup<"string-compare">;
 def StringPlusInt : DiagGroup<"string-plus-int">;
 def StringPlusChar : DiagGroup<"string-plus-char">;
 def StrncatSize : DiagGroup<"strncat-size">;
@@ -442,6 +443,11 @@ def UnreachableCodeAggressive : DiagGrou
 
 // Aggregation warning settings.
 
+// Populate -Waddress with warnings from other groups.
+def : DiagGroup<"address", [PointerBoolConversion,
+                            StringCompare,
+                            TautologicalPointerCompare]>;
+
 // -Widiomatic-parentheses contains warnings about 'idiomatic'
 // missing parentheses;  it is off by default.  We do not include it
 // in -Wparentheses because most users who use -Wparentheses explicitly

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=204776&r1=204775&r2=204776&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Tue Mar 25 20:55:33 2014
@@ -2350,7 +2350,7 @@ def warn_impcast_floating_point_to_bool
 def warn_impcast_pointer_to_bool : Warning<
     "address of%select{| function| array}0 '%1' will always evaluate to "
     "'true'">,
-    InGroup<BoolConversion>;
+    InGroup<PointerBoolConversion>;
 def warn_null_pointer_compare : Warning<
     "comparison of %select{address of|function|array}0 '%1' %select{not |}2"
     "equal to a null pointer is always %select{true|false}2">,
@@ -6375,7 +6375,7 @@ def warn_comparison_always : Warning<
 def warn_stringcompare : Warning<
   "result of comparison against %select{a string literal|@encode}0 is "
   "unspecified (use strncmp instead)">,
-  InGroup<DiagGroup<"string-compare">>;
+  InGroup<StringCompare>;
 
 def warn_identity_field_assign : Warning<
   "assigning %select{field|instance variable}0 to itself">,

Added: cfe/trunk/test/SemaCXX/warn-address.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-address.cpp?rev=204776&view=auto
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-address.cpp (added)
+++ cfe/trunk/test/SemaCXX/warn-address.cpp Tue Mar 25 20:55:33 2014
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wno-bool-conversion -Wno-string-compare -Wno-tautological-compare -Waddress %s
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+void foo();
+int arr[5];
+int global;
+const char* str = "";
+
+void test() {
+  if (foo) {}            // expected-warning{{always evaluate to 'true'}} \
+                         // expected-note{{silence}}
+  if (arr) {}            // expected-warning{{always evaluate to 'true'}}
+  if (&global) {}        // expected-warning{{always evaluate to 'true'}}
+  if (foo == 0) {}       // expected-warning{{always false}} \
+                         // expected-note{{silence}}
+  if (arr == 0) {}       // expected-warning{{always false}}
+  if (&global == 0) {}   // expected-warning{{always false}}
+
+  if (str == "foo") {}   // expected-warning{{unspecified}}
+}





More information about the cfe-commits mailing list