[cfe-commits] r152745 - in /cfe/trunk: include/clang/Basic/DiagnosticGroups.td include/clang/Basic/DiagnosticSemaKinds.td lib/Driver/Tools.cpp test/Analysis/nullptr.cpp test/SemaCXX/__null.cpp test/SemaCXX/conversion.cpp

David Blaikie dblaikie at gmail.com
Wed Mar 14 15:28:23 PDT 2012


Author: dblaikie
Date: Wed Mar 14 17:28:22 2012
New Revision: 152745

URL: http://llvm.org/viewvc/llvm-project?rev=152745&view=rev
Log:
Provide -Wnull-conversion separately from -Wconversion.

Like GCC, provide a NULL conversion to non-pointer conversion as a separate
flag, on by default. GCC's flag is "conversion-null" which we provide for
cross compatibility, but in the interests of consistency (with
-Wint-conversion, -Wbool-conversion, etc) the canonical Clang flag is called
-Wnull-conversion.

Patch by Lubos Lunak.
Review feedback by myself, Chandler Carruth, and Chad Rosier.

Modified:
    cfe/trunk/include/clang/Basic/DiagnosticGroups.td
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
    cfe/trunk/lib/Driver/Tools.cpp
    cfe/trunk/test/Analysis/nullptr.cpp
    cfe/trunk/test/SemaCXX/__null.cpp
    cfe/trunk/test/SemaCXX/conversion.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=152745&r1=152744&r2=152745&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Wed Mar 14 17:28:22 2012
@@ -28,6 +28,7 @@
 def AutoImport : DiagGroup<"auto-import">;
 def BoolConversions : DiagGroup<"bool-conversions">;
 def IntConversions : DiagGroup<"int-conversions">;
+def NullConversion : DiagGroup<"null-conversion">;
 def BuiltinRequiresHeader : DiagGroup<"builtin-requires-header">;
 def CXXCompat: DiagGroup<"c++-compat">;
 def CastAlign : DiagGroup<"cast-align">;
@@ -282,6 +283,7 @@
 //   - conversion warnings with constant sources are on by default
 //   - conversion warnings for literals are on by default
 //   - bool-to-pointer conversion warnings are on by default
+//   - __null-to-integer conversion warnings are on by default
 def Conversion : DiagGroup<"conversion",
                            [DiagGroup<"shorten-64-to-32">,
                             DiagGroup<"constant-conversion">,
@@ -289,6 +291,7 @@
                             DiagGroup<"string-conversion">,
                             DiagGroup<"sign-conversion">,
                             BoolConversions,
+                            NullConversion,
                             IntConversions]>,
                  DiagCategory<"Value Conversion Issue">;
 
@@ -357,6 +360,9 @@
 def : DiagGroup<"", [Extra]>;                   // -W = -Wextra
 def : DiagGroup<"endif-labels", [ExtraTokens]>; // -Wendif-labels=-Wendif-tokens
 def : DiagGroup<"comments", [Comment]>;         // -Wcomments = -Wcomment
+def : DiagGroup<"conversion-null",
+                [NullConversion]>; // -Wconversion-null = -Wnull-conversion
+             
 
 // A warning group for warnings that we want to have on by default in clang,
 // but which aren't on by default in GCC.

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=152745&r1=152744&r2=152745&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Mar 14 17:28:22 2012
@@ -1732,7 +1732,7 @@
     "expression">, InGroup<BoolConversions>;
 def warn_impcast_null_pointer_to_integer : Warning<
     "implicit conversion of NULL constant to integer">,
-    InGroup<DiagGroup<"conversion">>, DefaultIgnore;
+    InGroup<NullConversion>;
 def warn_impcast_function_to_bool : Warning<
     "address of function %q0 will always evaluate to 'true'">,
     InGroup<BoolConversions>;

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=152745&r1=152744&r2=152745&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Mar 14 17:28:22 2012
@@ -3168,6 +3168,7 @@
         .Case("c++11-narrowing", true)
         .Case("conditional-uninitialized", true)
         .Case("constant-conversion", true)
+        .Case("conversion-null", true)
         .Case("CFString-literal", true)
         .Case("constant-logical-operand", true)
         .Case("custom-atomic-properties", true)

Modified: cfe/trunk/test/Analysis/nullptr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/nullptr.cpp?rev=152745&r1=152744&r2=152745&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/nullptr.cpp (original)
+++ cfe/trunk/test/Analysis/nullptr.cpp Wed Mar 14 17:28:22 2012
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++11 -analyze -analyzer-checker=core -analyzer-store region -verify %s
+// RUN: %clang_cc1 -std=c++11 -Wno-conversion-null -analyze -analyzer-checker=core -analyzer-store region -verify %s
 
 // test to see if nullptr is detected as a null pointer
 void foo1(void) {

Modified: cfe/trunk/test/SemaCXX/__null.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/__null.cpp?rev=152745&r1=152744&r2=152745&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/__null.cpp (original)
+++ cfe/trunk/test/SemaCXX/__null.cpp Wed Mar 14 17:28:22 2012
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify
-// RUN: %clang_cc1 -triple i686-unknown-unknown %s -fsyntax-only -verify
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -Wno-null-conversion -fsyntax-only -verify
+// RUN: %clang_cc1 -triple i686-unknown-unknown %s -Wno-null-conversion -fsyntax-only -verify
 
 void f() {
   int* i = __null;

Modified: cfe/trunk/test/SemaCXX/conversion.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/conversion.cpp?rev=152745&r1=152744&r2=152745&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/conversion.cpp (original)
+++ cfe/trunk/test/SemaCXX/conversion.cpp Wed Mar 14 17:28:22 2012
@@ -53,10 +53,14 @@
   };
 }
 
+// This file tests -Wnull-conversion, a subcategory of -Wconversion
+// which is on by default.
+
 void test3() {
   int a = NULL; // expected-warning {{implicit conversion of NULL constant to integer}}
   int b;
   b = NULL; // expected-warning {{implicit conversion of NULL constant to integer}}
+  long l = NULL; // FIXME: this should also warn, but currently does not if sizeof(NULL)==sizeof(inttype)
   int c = ((((NULL)))); // expected-warning {{implicit conversion of NULL constant to integer}}
   int d;
   d = ((((NULL)))); // expected-warning {{implicit conversion of NULL constant to integer}}





More information about the cfe-commits mailing list