re PR c++/51290 (Bogus warning: zero as null pointer constant with static_cast)
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 24 Nov 2011 10:20:43 +0000 (10:20 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 24 Nov 2011 10:20:43 +0000 (10:20 +0000)
/cp
2011-11-24  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51290
* class.c (build_base_path): For the null pointer check use
nullptr_node instead of integer_zero_node.

/testsuite
2011-11-24  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51290
* g++.dg/warn/Wzero-as-null-pointer-constant-3.C: New.

From-SVN: r181690

gcc/cp/ChangeLog
gcc/cp/class.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-3.C [new file with mode: 0644]

index 6833fc390f293b596ae3f2d382ea55a51bca91ff..83a5508c16968e32c540acafdc680d579ed09149 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51290
+       * class.c (build_base_path): For the null pointer check use
+       nullptr_node instead of integer_zero_node.
+
 2011-11-22  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/51145
index cb0e683c59763823b8e6c0f874b3c720eff1b33e..3cb76de60aa353dea94aab5629334ae3fbac30a2 100644 (file)
@@ -338,7 +338,7 @@ build_base_path (enum tree_code code,
   /* Now that we've saved expr, build the real null test.  */
   if (null_test)
     {
-      tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
+      tree zero = cp_convert (TREE_TYPE (expr), nullptr_node);
       null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
                               expr, zero);
     }
index 4be809d22d23260c267839f7740eff365b19f917..5674c281ac30b306e5181e1b2ef7f13c25f43452 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51290
+       * g++.dg/warn/Wzero-as-null-pointer-constant-3.C: New.
+
 2011-11-23  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/51261
diff --git a/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-3.C b/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-3.C
new file mode 100644 (file)
index 0000000..ed54143
--- /dev/null
@@ -0,0 +1,22 @@
+// PR c++/51290
+// { dg-options "-Wzero-as-null-pointer-constant" }
+
+class A { int a; };
+
+class B { int b; };
+
+class C : public A, public B
+{
+    private:
+        static void foo (A *x)
+        {
+            C *y = static_cast<C *>(x);
+            (void) y;
+        }
+
+        static void bar (B *x)
+        {
+            C *y = static_cast<C *>(x);
+            (void) y;
+        }
+};