Message ID | 20240130150904.3447219-1-ppalka@redhat.com |
---|---|
State | Accepted |
Headers |
Return-Path: <gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1285764dyb; Tue, 30 Jan 2024 07:10:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IEG5Gw+XVCe6mn2A6p+VmdH3tgv4wcdA4q7rcwWl8TXkvuoTmR0Gos4TYC/Ajx02frgFSLF X-Received: by 2002:ac8:5b84:0:b0:42a:9aba:138 with SMTP id a4-20020ac85b84000000b0042a9aba0138mr6908790qta.6.1706627402773; Tue, 30 Jan 2024 07:10:02 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706627402; cv=pass; d=google.com; s=arc-20160816; b=k/AhE+hKZq014jRq/d6uARh7BG1e5oCx/9SurkfT2hL6mfJ3w6kHJUc9ejA4bXXNim 8YRv5EyTx55k+ACq344yJXdedodhLQUzgQ7VWHt+tX5I7akpOK30rDdN3RhMnf1/pgIg +LIvzfIP5d17Grvuy4OUO+/85r/NcB+5RX+RY2ewmMcZPS1Zfe85OeXBweINCBq04Kx5 +mKhP+YilExGlHIVz3R9wvYzc3TMZUyr2quFtZJa11sws/Hg8enGXAb+koZ5uwlgEEBY UNlI/EzsAAsbFv2JsYN7jXM1Q6tHCuJFHIPeDhwoF3kQdfmCZcEIzNYcDqVqtz+8xAsT aaZQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=mDbTPAEGtl6UQJbq66WNl/gL7xyn65EHiaj9zhL8I1Y=; fh=1Hi9m88IqcWZGtfSxUrMGG+GBgL26N02X1SANXM6iTs=; b=aFA2KxppViMQDAoXvd7wrG/eYM3vYUSoeL+vgpZ/0cv1A2QjWmq4Y6H9l2me5jaWN6 27QXQ/OeBPRLpl8GOhUqgTG3ZEO5k3tD+QbabkBLFvtaopVI9t0w90xp/gbPLJDrZvnk UJn1Kx3+ljRigyWvlnvm35OEF8njhZnYSD64baj9uvXA0XdzODyQDKnhMP3Ic6nbZPtt oJMjOBoZdV//ncbrTQEbUgoSj3VApdEB6M4rUgTMosT3POKxj//q3ZU34i7uGHUJLwZ0 WIJrKOUu1yeAez5Z3vOGb4PC8NKs5bMgYAi/x8rMOUSM8BBJnsnhN/xAUurlIDfBdl+B Y5Tw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="H1NVGYX/"; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id p17-20020a05622a049100b00429c7cc03e2si10783816qtx.25.2024.01.30.07.10.02 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 07:10:02 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="H1NVGYX/"; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 787B5385AC1D for <ouuuleilei@gmail.com>; Tue, 30 Jan 2024 15:10:02 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org 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 67C1C385DC1C for <gcc-patches@gcc.gnu.org>; Tue, 30 Jan 2024 15:09:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 67C1C385DC1C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 67C1C385DC1C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706627353; cv=none; b=IS0pwcKd9tL8UhY+bwVv8NOrPN/AARmWAd4aW799ny+GFToVhmPj7NE2YVg19apFo9wjU/cfaDVaAzAJ89WWVO0YZ6m31aSXRznsIoF983dIJGPbOBALW2sgpRuuqlz4FMRXy166J/0YS/3ivqO/lFT46gbIiTOvMo8QYdR3VGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706627353; c=relaxed/simple; bh=/dU4KyP28lmrnGWISkK4r3hjqwWJ9q6G/z1fhBWS9/o=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=TuFbqcSbo8Y9EX3dD6anymh5XgAq4HZBjaFbx+LuNM7ThirrE7QUKj5DzxlWJEVW3RETvJ49qG0gl8RXg47J57/ALjkxhKY2cVJ4L3QUZGY6iT/bBl+/QmlcaQzJyJf1lrYbW2iICUsFCZ1hI2JfG9/btw2YgjWlTxQ25RQOcIk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1706627351; 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; bh=mDbTPAEGtl6UQJbq66WNl/gL7xyn65EHiaj9zhL8I1Y=; b=H1NVGYX/GDcx74hV35kfrPXz+FqOxcA9fZSxsHzBgPe4069yPaY2RoXFZ4fIGIGz7yHZ+u XGeGRDGl7aRUl8cOIVRcU2EEsbdG47b5H0T69IdwUsMDbe6kRqnBNf9pH0InJnPAFjbD7V 8H0cRgZLKdvTK+barUYNqPe3z7R+7fQ= Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-227-Q6eV8IUrMbWUWF2BbQHd0A-1; Tue, 30 Jan 2024 10:09:09 -0500 X-MC-Unique: Q6eV8IUrMbWUWF2BbQHd0A-1 Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-68c4f54e6ccso39741306d6.2 for <gcc-patches@gcc.gnu.org>; Tue, 30 Jan 2024 07:09:09 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706627347; x=1707232147; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mDbTPAEGtl6UQJbq66WNl/gL7xyn65EHiaj9zhL8I1Y=; b=HWtLH1W9tC8CAshBrAJgofwQgxWgN2sWhESmWrOr2awCflMLalEvCC9rutQpkz5BDO uN8DJXpSixwdAepvPyhvjKhkwyw8Xh9cNR9thx8Ls/+6BmoKeecRFSr25YNghqCo8GbJ TZ/ESurzSEsUQWXm3rl5uSDdToQ5da9FKErFRKpTFY0LdOePpatsikguuBCDg86QE4ts yHLjXQY+3S3Raz1M+3LwEP8ha5G77j9uNHUJOdqylL7dGM7jVZFLhlBzOBP/U8VbxFUW O0+2UFWCTLpk5ToqqVzBg4b6dv+EynnGa1j8fgjMy3a/QGICzFEzkGwAbt/PvJZFzpI9 1wEA== X-Gm-Message-State: AOJu0Yzcb6HezSk/JnWeXnt3ZEqBZjdPKEAwVVnFHhg4X5CGcXPmzdK1 Pgz/FPR7UMTJwH8w8MxMyv4xFh6bTZSkuk3X+WCNDKS1c97i1Hn4N3MYTXi5OEC0AGo8nnhT589 u6JOEaiyKuOVxpNrZqmhPV5mVDKZqcNTRG+uORa+UeBHbezRqBGkpKwyF0ia/bLhLKNssOoH9n2 lwSGefPkp1RgNm/ys714rRmbN7EbV0zLRg66YY X-Received: by 2002:a05:6214:d4f:b0:67f:3d91:cfcc with SMTP id 15-20020a0562140d4f00b0067f3d91cfccmr10421431qvr.15.1706627347144; Tue, 30 Jan 2024 07:09:07 -0800 (PST) X-Received: by 2002:a05:6214:d4f:b0:67f:3d91:cfcc with SMTP id 15-20020a0562140d4f00b0067f3d91cfccmr10421410qvr.15.1706627346855; Tue, 30 Jan 2024 07:09:06 -0800 (PST) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id di8-20020ad458e8000000b0068c47832171sm2653585qvb.65.2024.01.30.07.09.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 07:09:06 -0800 (PST) From: Patrick Palka <ppalka@redhat.com> To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, Patrick Palka <ppalka@redhat.com> Subject: [PATCH] c++: duplicated side effects of xobj arg [PR113640] Date: Tue, 30 Jan 2024 10:09:04 -0500 Message-ID: <20240130150904.3447219-1-ppalka@redhat.com> X-Mailer: git-send-email 2.43.0.473.gc5b454771e MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_SORBS_WEB, 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.30 Precedence: list List-Id: Gcc-patches mailing list <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789528535551127778 X-GMAIL-MSGID: 1789528535551127778 |
Series |
c++: duplicated side effects of xobj arg [PR113640]
|
|
Checks
Context | Check | Description |
---|---|---|
snail/gcc-patch-check | success | Github commit url |
Commit Message
Patrick Palka
Jan. 30, 2024, 3:09 p.m. UTC
Bootstrapped and regtested on x86_64-pc-linu-xgnu, does this look OK for trunk? -- >8 -- We miscompile the below testcase because keep_unused_object_arg duplicates the side effects of a (by-value) object argument of a xobj member function. PR c++/113640 gcc/cp/ChangeLog: * call.cc (keep_unused_object_arg): Punt for an xobj member function. gcc/testsuite/ChangeLog: * g++.dg/cpp23/explicit-obj-lambda14.C: New test. --- gcc/cp/call.cc | 2 +- .../g++.dg/cpp23/explicit-obj-lambda14.C | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C
Comments
On 1/30/24 10:09, Patrick Palka wrote: > Bootstrapped and regtested on x86_64-pc-linu-xgnu, does this > look OK for trunk? OK. > -- >8 -- > > We miscompile the below testcase because keep_unused_object_arg > duplicates the side effects of a (by-value) object argument of a > xobj member function. > > PR c++/113640 > > gcc/cp/ChangeLog: > > * call.cc (keep_unused_object_arg): Punt for an xobj member > function. > > gcc/testsuite/ChangeLog: > > * g++.dg/cpp23/explicit-obj-lambda14.C: New test. > --- > gcc/cp/call.cc | 2 +- > .../g++.dg/cpp23/explicit-obj-lambda14.C | 27 +++++++++++++++++++ > 2 files changed, 28 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C > > diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc > index 9de0d77c423..451a189f7cf 100644 > --- a/gcc/cp/call.cc > +++ b/gcc/cp/call.cc > @@ -5256,7 +5256,7 @@ keep_unused_object_arg (tree result, tree obj, tree fn) > { > if (result == NULL_TREE > || result == error_mark_node > - || TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE > + || DECL_OBJECT_MEMBER_FUNCTION_P (fn) > || !TREE_SIDE_EFFECTS (obj)) > return result; > > diff --git a/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C > new file mode 100644 > index 00000000000..03dededfe33 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C > @@ -0,0 +1,27 @@ > +// PR c++/113640 > +// { dg-do run { target c++23 } } > + > +static int total; > + > +struct A { > + A f(this auto self, int n) { > + total += n; > + return self; > + } > +}; > + > +int main() { > + A a; > + a.f(1).f(42).f(100); > + if (total != 143) > + __builtin_abort(); > + > + total = 0; > + auto l = [](this auto self, int n) { > + total += n; > + return self; > + }; > + l(1)(42)(100); > + if (total != 143) > + __builtin_abort(); > +}
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 9de0d77c423..451a189f7cf 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -5256,7 +5256,7 @@ keep_unused_object_arg (tree result, tree obj, tree fn) { if (result == NULL_TREE || result == error_mark_node - || TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE + || DECL_OBJECT_MEMBER_FUNCTION_P (fn) || !TREE_SIDE_EFFECTS (obj)) return result; diff --git a/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C new file mode 100644 index 00000000000..03dededfe33 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda14.C @@ -0,0 +1,27 @@ +// PR c++/113640 +// { dg-do run { target c++23 } } + +static int total; + +struct A { + A f(this auto self, int n) { + total += n; + return self; + } +}; + +int main() { + A a; + a.f(1).f(42).f(100); + if (total != 143) + __builtin_abort(); + + total = 0; + auto l = [](this auto self, int n) { + total += n; + return self; + }; + l(1)(42)(100); + if (total != 143) + __builtin_abort(); +}