summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-11-30 18:31:30 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-11-30 18:31:30 +0000
commit23ffb99e94f8cbd3ac656f5efa3035c00432e6e2 (patch)
treec75ad6f57a0a20bf98ff10db1700e24698cdeef7
parent2e65f38f1bf1f04c530bfeb6b543f084564eec3d (diff)
downloadgcc-23ffb99e94f8cbd3ac656f5efa3035c00432e6e2.tar.gz
re PR c++/51299 ([C++11] erroneous nullptr warning on dynamic cast)
/cp 2011-11-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51299 * rtti.c (ifnonnull): Use nullptr_node. (build_dynamic_cast_1): Call cp_truthvalue_conversion instead of c_common_truthvalue_conversion. /testsuite 2011-11-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51299 * g++.dg/warn/Wzero-as-null-pointer-constant-4.C: New. From-SVN: r181854
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/rtti.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C22
4 files changed, 37 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0772ee9715c..42573eff39d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2011-11-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51299
+ * rtti.c (ifnonnull): Use nullptr_node.
+ (build_dynamic_cast_1): Call cp_truthvalue_conversion instead
+ of c_common_truthvalue_conversion.
+
2011-11-24 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51227
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 818b8d0eee4..4494fddc03e 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -503,8 +503,8 @@ ifnonnull (tree test, tree result)
{
return build3 (COND_EXPR, TREE_TYPE (result),
build2 (EQ_EXPR, boolean_type_node, test,
- cp_convert (TREE_TYPE (test), integer_zero_node)),
- cp_convert (TREE_TYPE (result), integer_zero_node),
+ cp_convert (TREE_TYPE (test), nullptr_node)),
+ cp_convert (TREE_TYPE (result), nullptr_node),
result);
}
@@ -747,7 +747,7 @@ build_dynamic_cast_1 (tree type, tree expr, tsubst_flags_t complain)
tree neq;
result = save_expr (result);
- neq = c_common_truthvalue_conversion (input_location, result);
+ neq = cp_truthvalue_conversion (result);
return cp_convert (type,
build3 (COND_EXPR, TREE_TYPE (result),
neq, result, bad));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3d695a22031..fb13fb53c21 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51299
+ * g++.dg/warn/Wzero-as-null-pointer-constant-4.C: New.
+
2011-11-29 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/51247
diff --git a/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C b/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C
new file mode 100644
index 00000000000..548caac36e9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C
@@ -0,0 +1,22 @@
+// PR c++/51299
+// { dg-options "-Wzero-as-null-pointer-constant" }
+
+class Base
+{
+ public:
+ virtual ~Base();
+};
+
+class Derived : public Base
+{
+};
+
+void foo(Base* b)
+{
+ Derived* d = dynamic_cast<Derived*>(b);
+}
+
+void bar(Base& b)
+{
+ Derived& d = dynamic_cast<Derived&>(b);
+}