diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-11-30 18:31:30 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-11-30 18:31:30 +0000 |
commit | 23ffb99e94f8cbd3ac656f5efa3035c00432e6e2 (patch) | |
tree | c75ad6f57a0a20bf98ff10db1700e24698cdeef7 /gcc | |
parent | 2e65f38f1bf1f04c530bfeb6b543f084564eec3d (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/rtti.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C | 22 |
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); +} |