From patchwork Fri Nov 25 04:34:29 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 127640 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 8607B1007D1 for ; Fri, 25 Nov 2011 15:35:50 +1100 (EST) Received: (qmail 6251 invoked by alias); 25 Nov 2011 04:35:46 -0000 Received: (qmail 6039 invoked by uid 22791); 25 Nov 2011 04:35:44 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from rcsinet15.oracle.com (HELO rcsinet15.oracle.com) (148.87.113.117) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 25 Nov 2011 04:35:20 +0000 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by rcsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id pAP4ZIiC001067 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 25 Nov 2011 04:35:19 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id pAP4ZHWj029498 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 25 Nov 2011 04:35:18 GMT Received: from abhmt104.oracle.com (abhmt104.oracle.com [141.146.116.56]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id pAP4ZCJe027462; Thu, 24 Nov 2011 22:35:12 -0600 Received: from [192.168.1.4] (/79.53.14.121) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 24 Nov 2011 20:35:11 -0800 Message-ID: <4ECF1AD5.1070600@oracle.com> Date: Fri, 25 Nov 2011 05:34:29 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: Jason Merrill Subject: [C++ Patch] PR 51299 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, more spurious -Wzero-as-null.. warnings, this one is about dynamic_casts, which I completely overlooked. In order to fix the original testcase, which involves pointers, it's enough to use nullptr_node in ifnnonnull; in order to fix a version I added for references, we have to use here too the c_inhibit_evaluation_warnings trick, because result in that case, a SAVE_EXPR, is of type POINTER_TYPE. Tested x86_64-linux, Ok? Thanks, Paolo. ///////////////// /cp 2011-11-25 Paolo Carlini PR c++/51299 * rtti.c (ifnonnull): Use nullptr_node. (build_dynamic_cast_1): Inhibit evaluation warnings for the c_common_truthvalue_conversion call. /testsuite 2011-11-25 Paolo Carlini PR c++/51299 * g++.dg/warn/Wzero-as-null-pointer-constant-4.C: New. Index: testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C =================================================================== --- testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C (revision 0) +++ testsuite/g++.dg/warn/Wzero-as-null-pointer-constant-4.C (revision 0) @@ -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(b); +} + +void bar(Base& b) +{ + Derived& d = dynamic_cast(b); +} Index: cp/rtti.c =================================================================== --- cp/rtti.c (revision 181706) +++ cp/rtti.c (working copy) @@ -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,10 @@ build_dynamic_cast_1 (tree type, tree expr, tsubst tree neq; result = save_expr (result); + /* Avoid -Wzero-as-null-pointer-constant warnings. */ + ++c_inhibit_evaluation_warnings; neq = c_common_truthvalue_conversion (input_location, result); + --c_inhibit_evaluation_warnings; return cp_convert (type, build3 (COND_EXPR, TREE_TYPE (result), neq, result, bad));