From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 169533858C39 for ; Fri, 13 Jan 2023 17:00:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 169533858C39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1673629236; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YoAwJBBVEo53Oh+PBUb7iifap9ppRtixDKXvzXl0WAc=; b=Jx+Lar+knWGZOQY+C18ENjPS04Y5f+uZKIlZJt4cFjzgniIob2ULqDfzKRSnVSFLfor6SN qJiJ5Tu6m+HoFEum8QCgpJ63+CJxQE9+tAbSOiAEOeO/wOU6YgHhdlCcNpf7jAbjWKuWmd UpjJ4ikW6GCw+fz761l/xL9PHw0pUOI= Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-172-nm-ZY58oPvexPkK3TI61Bg-1; Fri, 13 Jan 2023 12:00:33 -0500 X-MC-Unique: nm-ZY58oPvexPkK3TI61Bg-1 Received: by mail-qk1-f197.google.com with SMTP id y6-20020a05620a44c600b00704d482d3a0so15666763qkp.21 for ; Fri, 13 Jan 2023 09:00:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=YoAwJBBVEo53Oh+PBUb7iifap9ppRtixDKXvzXl0WAc=; b=iFmRYsrl03FJiq6U6zjokR6a2shNnbL3RMGm1ZYYFvd8xpjGq5SIJG8qYTn0raqaOn 10md9WoZwR0akaXkic6TA6hhjJU9VZYT/NUa/SqLihZAvKVgbwagn6cmCEGz/a74t69Y 11oDzMEYCAF17eQ6D9xbt38gyUEnw4ngpLpijqiP478UPGfnznUMTbDvDrZdx1YLAbVt ts8pophqlc4WXfTTDwXHNweq3iZSP6ajg1Ym96kV86IrFMCj+3c1dEra2BqARevsypmO qjb9csaI+qBp5hAXZdaIi/GcJW5v/jqkA1LeR7oNZu/YF3RCx41Y3RrQdvV83CTrGpSo YKIQ== X-Gm-Message-State: AFqh2kqbR7Bt0VXq4Q1yOuOommFsrgdWOtO8nLl4N98UlEmceAyQg749 rQPKf1mYXTl7M4z2MkAqxn4T8GigCjhEMIswCxaX0tOHAaDSV5vTux9VRWnaDFI2RYJUOVRfw3O hXDfaU2Q1hI4nga5zeg== X-Received: by 2002:ac8:4747:0:b0:3b3:560b:353 with SMTP id k7-20020ac84747000000b003b3560b0353mr2293447qtp.63.1673629233060; Fri, 13 Jan 2023 09:00:33 -0800 (PST) X-Google-Smtp-Source: AMrXdXuRuYzrpH1cdG5Dus5joSPGKWqONj5b14PJ96H+ppgfYBoDrbyx2mMxExgaAsUplovtIJs3Og== X-Received: by 2002:ac8:4747:0:b0:3b3:560b:353 with SMTP id k7-20020ac84747000000b003b3560b0353mr2293403qtp.63.1673629232701; Fri, 13 Jan 2023 09:00:32 -0800 (PST) Received: from [192.168.1.108] (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id i1-20020a05620a248100b006fc9fe67e34sm13067383qkn.81.2023.01.13.09.00.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 13 Jan 2023 09:00:32 -0800 (PST) Message-ID: <70ac045c-28c7-777b-3fda-fa07a8002395@redhat.com> Date: Fri, 13 Jan 2023 12:00:31 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH] c++: Avoid some false positive -Wfloat-conversion warnings with extended precision [PR108285] To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org References: From: Jason Merrill In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 1/11/23 04:52, Jakub Jelinek wrote: > Hi! > > On the following testcase trunk emits a false positive warning on ia32. > convert_like_internal is there called with type of double and > expr EXCESS_PRECISION_EXPR with float type with long double operand > 2.L * (long double) x. > Now, for the code generation we do the right thing, cp_convert > to double from that 2.L * (long double) x, but we call even > cp_convert_and_check with that and that emits the -Wfloat-conversion > warning. Looking at what the C FE does in this case, it calls > convert_and_check with the EXCESS_PRECISION_EXPR expression rather > than its operand, and essentially uses the operand for code generation > and EXCESS_PRECISION_EXPR itself for warnings. > > The following patch does that too for the C++ FE. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? OK. > 2023-01-11 Jakub Jelinek > > PR c++/108285 > * cvt.cc (cp_convert_and_check): For EXCESS_PRECISION_EXPR > use its operand except that for warning purposes use the original > EXCESS_PRECISION_EXPR. > * call.cc (convert_like_internal): Only look through > EXCESS_PRECISION_EXPR when calling cp_convert, not when calling > cp_convert_and_check. > > * g++.dg/warn/pr108285.C: New test. > > --- gcc/cp/cvt.cc.jj 2022-10-14 09:32:32.403797521 +0200 > +++ gcc/cp/cvt.cc 2023-01-10 13:53:00.639130717 +0100 > @@ -652,8 +652,10 @@ cp_convert (tree type, tree expr, tsubst > tree > cp_convert_and_check (tree type, tree expr, tsubst_flags_t complain) > { > - tree result; > + tree result, expr_for_warning = expr; > > + if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR) > + expr = TREE_OPERAND (expr, 0); > if (TREE_TYPE (expr) == type) > return expr; > if (expr == error_mark_node) > @@ -663,7 +665,7 @@ cp_convert_and_check (tree type, tree ex > if ((complain & tf_warning) > && c_inhibit_evaluation_warnings == 0) > { > - tree folded = cp_fully_fold (expr); > + tree folded = cp_fully_fold (expr_for_warning); > tree folded_result; > if (folded == expr) > folded_result = result; > --- gcc/cp/call.cc.jj 2023-01-09 23:41:11.135159084 +0100 > +++ gcc/cp/call.cc 2023-01-10 13:50:09.277640628 +0100 > @@ -8863,12 +8863,14 @@ convert_like_internal (conversion *convs > return error_mark_node; > > warning_sentinel w (warn_zero_as_null_pointer_constant); > - if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR) > - expr = TREE_OPERAND (expr, 0); > if (issue_conversion_warnings) > expr = cp_convert_and_check (totype, expr, complain); > else > - expr = cp_convert (totype, expr, complain); > + { > + if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR) > + expr = TREE_OPERAND (expr, 0); > + expr = cp_convert (totype, expr, complain); > + } > > return expr; > } > --- gcc/testsuite/g++.dg/warn/pr108285.C.jj 2023-01-10 16:52:06.115345345 +0100 > +++ gcc/testsuite/g++.dg/warn/pr108285.C 2023-01-10 16:39:26.646532929 +0100 > @@ -0,0 +1,11 @@ > +// PR c++/108285 > +// { dg-do compile } > +// { dg-options "-fexcess-precision=standard -Wfloat-conversion" } > + > +void bar (double); > + > +void > +foo (float x) > +{ > + bar (2 * x); // { dg-bogus "conversion from '\[^\n\r]\*' to 'double' may change value" } > +} > > Jakub >