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.129.124]) by sourceware.org (Postfix) with ESMTPS id 1DB0A3858C74 for ; Mon, 15 Aug 2022 12:29:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1DB0A3858C74 Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-553-c4AGLFYMMy-QiAYjYSJdWg-1; Mon, 15 Aug 2022 08:29:31 -0400 X-MC-Unique: c4AGLFYMMy-QiAYjYSJdWg-1 Received: by mail-qk1-f199.google.com with SMTP id l15-20020a05620a28cf00b006b46997c070so6921867qkp.20 for ; Mon, 15 Aug 2022 05:29:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc; bh=Mvmq5dY0taeOlS7TizSIpcVgcN18w73m1CcC5IpUIQA=; b=QtAci4lV+WWCFJEfNoJ9RczfYSJMaXkSV5XzU2XWRR0kCC3SscvthWUGNZ3CeUu0KS nyluZxsVLNbkffo5+ZjKh8PKpcxCv8EU8t5cvW7xd/dmSowWQKPGtt3alFLL34YYdLTL WPfD7DPlMXufOPm+6tO99voRVIa7KqSr8JgbMqor31VzFRBxkP65DUejBQOHQ2z5WnBe vjtnTuwvudO49RjBEB9DFDc/GXlUKLRrZnWMITvuDWu+vnIY7gO714zzNIgWpA5IKjvS o6Tu2mXErq7e7560xKqmWkrv9SFWAIKkUZpuYyMmkcWy9rgU2f75FHEshKxd8gDwjHeA fqVw== X-Gm-Message-State: ACgBeo2qq8+g4Tfb8pfMLZ6n8CjznJPbziWlRLgoq6JbtLNBstd3Ix7v ogBNPYkINprHxYl9M6kbThu/d5m3JlvZlenTVQDGziDxBQS5wdq0tlf+B4HWLZI1Elyqqspka/o bE06YSkpApnc7EGbMWQ== X-Received: by 2002:a37:2dc7:0:b0:6b8:62a6:ba34 with SMTP id t190-20020a372dc7000000b006b862a6ba34mr10549849qkh.760.1660566571155; Mon, 15 Aug 2022 05:29:31 -0700 (PDT) X-Google-Smtp-Source: AA6agR7lj3dfEOyPc5YPFBPwzOGZON7i1C9/9r7Lqi3uaHLq264gKX8JMyvUxcpMI8xMYtIP6HQvGg== X-Received: by 2002:a37:2dc7:0:b0:6b8:62a6:ba34 with SMTP id t190-20020a372dc7000000b006b862a6ba34mr10549838qkh.760.1660566570883; Mon, 15 Aug 2022 05:29:30 -0700 (PDT) Received: from redhat.com ([2601:184:4780:4310::e531]) by smtp.gmail.com with ESMTPSA id e11-20020ac845cb000000b0031f36cd1958sm7979554qto.81.2022.08.15.05.29.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Aug 2022 05:29:30 -0700 (PDT) Date: Mon, 15 Aug 2022 08:29:28 -0400 From: Marek Polacek To: Jakub Jelinek Cc: Jason Merrill , gcc-patches@gcc.gnu.org Subject: Re: [PATCH] c++: Implement P2327R1 - De-deprecating volatile compound operations Message-ID: References: MIME-Version: 1.0 In-Reply-To: User-Agent: Mutt/2.2.6 (2022-06-05) X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, 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 12:29:35 -0000 On Mon, Aug 15, 2022 at 12:31:10PM +0200, Jakub Jelinek wrote: > Hi! > > 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. I'd say so. > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? Can't approve but LGTM. > 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 > Marek