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 33FB73858C2F for ; Mon, 15 Aug 2022 19:57:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 33FB73858C2F Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-62-3NYvMZaxOYuUgjFyYMeVZQ-1; Mon, 15 Aug 2022 15:57:55 -0400 X-MC-Unique: 3NYvMZaxOYuUgjFyYMeVZQ-1 Received: by mail-qt1-f199.google.com with SMTP id y12-20020ac8708c000000b00342f1bb8428so6856280qto.5 for ; Mon, 15 Aug 2022 12:57:55 -0700 (PDT) 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; bh=8EKS24XpkpSsC7ASOE5YYfjNvYpVcqBfrFF06XBgYw4=; b=PINWqH6+rLfRWuG/VOGnezEIcX5Y3YjKfT5J8c3KhekxCMELXXa8xenimsKLyhvhn7 zlN4U5yJ7sqljKOnVKcPi2EeXP5V8LzEsAkYY2s9J5hz8PQIMF7T0IUEXKRDeZMVDtBY X2lI6FfEt3OvNsooSitNaejqP1ZZTFAknf+Zmpb5P0MExeOcHBpQZGqWH05VFLsFLdb4 yPvuMWiEwRDpqfMN3yIr3ujloZmOd4H+qFSMwF5jSJfn79hi+YPxzWRg/2u5Ohh9jaWt BuJmulCATQ4ltm8pkf1HKerMNuv16NcwLC7JBFoN2+5pjyZKJQ+ApY3luQCx8fHq8Vbw 7BbA== X-Gm-Message-State: ACgBeo3A4RPhucsn4vnAFYYcZbfYuJ6bmM8gKG7dFOdhERAkEPhtx+D1 lzXklhfgc7gd6PK9EJB/YoCfUrqfjuYltbK+WL/48hMWEa3jWjgLJGLsQcGLkM20mvSZI+8MvGf NJDOqazKgi1l8cTfnSA== X-Received: by 2002:a05:622a:6185:b0:2f1:ebdd:58c with SMTP id hh5-20020a05622a618500b002f1ebdd058cmr15522857qtb.400.1660593475394; Mon, 15 Aug 2022 12:57:55 -0700 (PDT) X-Google-Smtp-Source: AA6agR6uoNPeTa7WgjNKS/e3QmLZUWOypk1QpycvL/dCQzML9+kdCXzMmGabhNI4/tRTHfjCry4/Dw== X-Received: by 2002:a05:622a:6185:b0:2f1:ebdd:58c with SMTP id hh5-20020a05622a618500b002f1ebdd058cmr15522840qtb.400.1660593474992; Mon, 15 Aug 2022 12:57:54 -0700 (PDT) Received: from [192.168.1.101] (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 fx9-20020a05622a4ac900b00338ae1f5421sm9079762qtb.0.2022.08.15.12.57.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Aug 2022 12:57:54 -0700 (PDT) Message-ID: <9011c746-8293-5e21-0980-c8d11b806105@redhat.com> Date: Mon, 15 Aug 2022 15:57:53 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Subject: Re: [PATCH] c++: Implement P2327R1 - De-deprecating volatile compound operations To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org, Marek Polacek 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.6 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, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Aug 2022 19:57:59 -0000 On 8/15/22 03:31, Jakub Jelinek wrote: > > From what I can see, this has been voted in as a DR and as it means > we warn less often than before in -std={gnu,c}++2{0,3} modes or with > -Wvolatile, I wonder if it shouldn't be backported to affected release > branches as well. If people are complaining about it on release branches, sure. > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? OK. > 2022-08-15 Jakub Jelinek > > * typeck.cc (cp_build_modify_expr): Implement > P2327R1 - De-deprecating volatile compound operations. Don't warn > for |=, &= or ^= with volatile lhs. > * expr.cc (mark_use) : Adjust warning wording, > leave out simple. > > * g++.dg/cpp2a/volatile1.C: Adjust for de-deprecation of volatile > compound |=, &= and ^= operations. > * g++.dg/cpp2a/volatile3.C: Likewise. > * g++.dg/cpp2a/volatile5.C: Likewise. > > --- gcc/cp/typeck.cc.jj 2022-06-17 17:36:19.689107831 +0200 > +++ gcc/cp/typeck.cc 2022-08-14 11:14:15.368316963 +0200 > @@ -9136,10 +9136,14 @@ cp_build_modify_expr (location_t loc, tr > > /* An expression of the form E1 op= E2. [expr.ass] says: > "Such expressions are deprecated if E1 has volatile-qualified > - type." We warn here rather than in cp_genericize_r because > + type and op is not one of the bitwise operators |, &, ^." > + We warn here rather than in cp_genericize_r because > for compound assignments we are supposed to warn even if the > assignment is a discarded-value expression. */ > - if (TREE_THIS_VOLATILE (lhs) || CP_TYPE_VOLATILE_P (lhstype)) > + if (modifycode != BIT_AND_EXPR > + && modifycode != BIT_IOR_EXPR > + && modifycode != BIT_XOR_EXPR > + && (TREE_THIS_VOLATILE (lhs) || CP_TYPE_VOLATILE_P (lhstype))) > warning_at (loc, OPT_Wvolatile, > "compound assignment with %-qualified left " > "operand is deprecated"); > --- gcc/cp/expr.cc.jj 2022-06-27 11:18:02.268063761 +0200 > +++ gcc/cp/expr.cc 2022-08-14 11:41:37.555649422 +0200 > @@ -220,7 +220,7 @@ mark_use (tree expr, bool rvalue_p, bool > case MODIFY_EXPR: > { > tree lhs = TREE_OPERAND (expr, 0); > - /* [expr.ass] "A simple assignment whose left operand is of > + /* [expr.ass] "An assignment whose left operand is of > a volatile-qualified type is deprecated unless the assignment > is either a discarded-value expression or appears in an > unevaluated context." */ > @@ -230,7 +230,7 @@ mark_use (tree expr, bool rvalue_p, bool > && !TREE_THIS_VOLATILE (expr)) > { > if (warning_at (location_of (expr), OPT_Wvolatile, > - "using value of simple assignment with " > + "using value of assignment with " > "%-qualified left operand is " > "deprecated")) > /* Make sure not to warn about this assignment again. */ > --- gcc/testsuite/g++.dg/cpp2a/volatile1.C.jj 2020-07-28 15:39:10.013756159 +0200 > +++ gcc/testsuite/g++.dg/cpp2a/volatile1.C 2022-08-14 11:46:42.721626890 +0200 > @@ -56,6 +56,9 @@ fn2 () > vi = i; > vi = i = 42; > i = vi = 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > + i = vi |= 42; // { dg-warning "using value of assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > + i = vi &= 42; // { dg-warning "using value of assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > + i = vi ^= 42; // { dg-warning "using value of assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > &(vi = i); // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > (vi = 42, 45); > (i = vi = 42, 10); // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > @@ -74,8 +77,9 @@ fn2 () > vi += i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > vi -= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > vi %= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > - vi ^= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > - vi |= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > + vi ^= i; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > + vi |= i; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > + vi &= i; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > vi /= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > vi = vi += 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > vi += vi = 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > @@ -131,7 +135,8 @@ void raccoon () > volatile T t, u; > t = 42; > u = t = 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > - t &= 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > + t += 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" "" { target c++20 } } > + t &= 42; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > } > > void > --- gcc/testsuite/g++.dg/cpp2a/volatile3.C.jj 2020-01-12 11:54:37.149402305 +0100 > +++ gcc/testsuite/g++.dg/cpp2a/volatile3.C 2022-08-14 11:47:05.691324132 +0200 > @@ -57,6 +57,9 @@ fn2 () > vi = i; > vi = i = 42; > i = vi = 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > + i = vi |= 42; // { dg-warning "using value of assignment with .volatile.-qualified left operand is deprecated" } > + i = vi &= 42; // { dg-warning "using value of assignment with .volatile.-qualified left operand is deprecated" } > + i = vi ^= 42; // { dg-warning "using value of assignment with .volatile.-qualified left operand is deprecated" } > &(vi = i); // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > (vi = 42, 45); > (i = vi = 42, 10); // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > @@ -75,8 +78,9 @@ fn2 () > vi += i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > vi -= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > vi %= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > - vi ^= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > - vi |= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > + vi ^= i; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > + vi |= i; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > + vi &= i; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > vi /= i; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > vi = vi += 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > vi += vi = 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > @@ -132,7 +136,8 @@ void raccoon () > volatile T t, u; > t = 42; > u = t = 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > - t &= 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > + t += 42; // { dg-warning "assignment with .volatile.-qualified left operand is deprecated" } > + t &= 42; // { dg-bogus "assignment with .volatile.-qualified left operand is deprecated" } > } > > void > --- gcc/testsuite/g++.dg/cpp2a/volatile5.C.jj 2021-02-08 19:07:33.110166905 +0100 > +++ gcc/testsuite/g++.dg/cpp2a/volatile5.C 2022-08-14 11:42:47.779723765 +0200 > @@ -8,8 +8,8 @@ f (bool b) > { > (b ? x : y) = 1; > (b ? x : y) += 1; // { dg-warning "compound assignment" "" { target c++20 } } > - z = (b ? x : y) = 1; // { dg-warning "using value of simple assignment" "" { target c++20 } } > - ((z = 2) ? x : y) = 1; // { dg-warning "using value of simple assignment" "" { target c++20 } } > - (b ? (x = 2) : y) = 1; // { dg-warning "using value of simple assignment" "" { target c++20 } } > - (b ? x : (y = 5)) = 1; // { dg-warning "using value of simple assignment" "" { target c++20 } } > + z = (b ? x : y) = 1; // { dg-warning "using value of assignment" "" { target c++20 } } > + ((z = 2) ? x : y) = 1; // { dg-warning "using value of assignment" "" { target c++20 } } > + (b ? (x = 2) : y) = 1; // { dg-warning "using value of assignment" "" { target c++20 } } > + (b ? x : (y = 5)) = 1; // { dg-warning "using value of assignment" "" { target c++20 } } > } > > Jakub >