From patchwork Mon Mar 12 18:32:35 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 146201 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 455F6B6FAF for ; Tue, 13 Mar 2012 05:35:38 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1332182139; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Message-ID:Date:From:User-Agent:MIME-Version: To:CC:Subject:Content-Type:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=wRyYbaHiQep0WBfRN4hRF+UMRkE=; b=bE/Q2HUtITjNMwQ /wxd0WRr8IGqvRMHI8VfpxDo3HDun4bWpBYRNx5G5ZYsInWYtyg7YnekJ33HvXts XnisXHQN6bF7PsBJs84ofFGoJdbgjhtr40vLmWevRV6eBUtddbki3NtMVVDB4rwM VFlsDP71nRB4ZJTg5yAirs9LyIqE= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=bPaTmOJ+gDwFXBMN6tob9/+jME+ok9SA1gjHQgBs9B2aAPRaiJtCEy5+OFH1UW v5zu98uIXW4vjfL5xWZG3zLikMdsQ+bEJtYPNdbIvO4KN20hKhxq0m//Xd6mF7QL tR7DW6/VLYTLUcD9b1MjIYGDWNjuXJAiRHo7A9ubuUqsI=; Received: (qmail 26833 invoked by alias); 12 Mar 2012 18:35:33 -0000 Received: (qmail 26693 invoked by uid 22791); 12 Mar 2012 18:35:31 -0000 X-SWARE-Spam-Status: No, hits=-6.2 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, T_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; Mon, 12 Mar 2012 18:35:18 +0000 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by rcsinet15.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id q2CIZG7O015126 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 12 Mar 2012 18:35:17 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q2CIZFxd016062 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 12 Mar 2012 18:35:16 GMT Received: from abhmt105.oracle.com (abhmt105.oracle.com [141.146.116.57]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q2CIZF98019884; Mon, 12 Mar 2012 13:35:15 -0500 Received: from [192.168.1.4] (/79.17.190.137) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 12 Mar 2012 11:35:15 -0700 Message-ID: <4F5E4143.6090607@oracle.com> Date: Mon, 12 Mar 2012 19:32:35 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.2) Gecko/20120215 Thunderbird/10.0.2 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: Jason Merrill Subject: [C++ Patch] PR 52299, bogus div by zero warning 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, I handled this issue as outlined by Jakub in the audit trail. For the purpose of the bogus div by zero warning just using c_inhibit_evaluation_warnings appears to work fine. Tested x86_64-linux. Thanks, Paolo. /////////////////////// /cp 2012-03-12 Paolo Carlini PR c++/52299 * pt.c (tsubst_copy_and_build, case COND_EXPR): Avoid bogus division by zero warnings. /testsuite 2012-03-12 Paolo Carlini PR c++/52299 * g++.dg/warn/Wdiv-by-zero-bogus.C: New. Index: testsuite/g++.dg/warn/Wdiv-by-zero-bogus.C =================================================================== --- testsuite/g++.dg/warn/Wdiv-by-zero-bogus.C (revision 0) +++ testsuite/g++.dg/warn/Wdiv-by-zero-bogus.C (revision 0) @@ -0,0 +1,30 @@ +// PR c++/52299 + +template +struct test0 { + static const unsigned a_ + = x ? 10 / x : 10; +}; + +template +struct test1 { + static const unsigned a_ + = !x ? 10 : 10 / x; +}; + +template +struct test2 { + static const unsigned a_ + = x ? 10 / x : 10; +}; + +template +struct test3 { + static const unsigned a_ + = !x ? 10 : 10 / x; +}; + +unsigned i0 = test0<0>::a_; +unsigned i1 = test1<0>::a_; +unsigned i2 = test2::a_; +unsigned i3 = test3::a_; Index: cp/pt.c =================================================================== --- cp/pt.c (revision 185247) +++ cp/pt.c (working copy) @@ -13943,12 +13943,36 @@ tsubst_copy_and_build (tree t, } case COND_EXPR: - return build_x_conditional_expr - (RECUR (TREE_OPERAND (t, 0)), - RECUR (TREE_OPERAND (t, 1)), - RECUR (TREE_OPERAND (t, 2)), - complain); + { + tree cond = RECUR (TREE_OPERAND (t, 0)); + tree op1, op2; + if (TREE_CODE (cond) == INTEGER_CST) + { + if (integer_zerop (cond)) + { + ++c_inhibit_evaluation_warnings; + op1 = RECUR (TREE_OPERAND (t, 1)); + --c_inhibit_evaluation_warnings; + op2 = RECUR (TREE_OPERAND (t, 2)); + } + else + { + op1 = RECUR (TREE_OPERAND (t, 1)); + ++c_inhibit_evaluation_warnings; + op2 = RECUR (TREE_OPERAND (t, 2)); + --c_inhibit_evaluation_warnings; + } + } + else + { + op1 = RECUR (TREE_OPERAND (t, 1)); + op2 = RECUR (TREE_OPERAND (t, 2)); + } + + return build_x_conditional_expr (cond, op1, op2, complain); + } + case PSEUDO_DTOR_EXPR: return finish_pseudo_destructor_expr (RECUR (TREE_OPERAND (t, 0)),