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
This commit is contained in:
Paolo Carlini 2011-11-30 18:31:30 +00:00 committed by Paolo Carlini
parent 2e65f38f1b
commit 23ffb99e94
4 changed files with 37 additions and 3 deletions

View File

@ -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

View File

@ -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));

View File

@ -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

View File

@ -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);
}