From patchwork Tue Jan 30 15:09:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 85030 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 210D1385DC1C for ; Tue, 30 Jan 2024 15:09:47 +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 ; 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 ; 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-Google-Smtp-Source: AGHT+IH3+RTQ8FFxWSigi3z+xorM//OWqswVIwsGLIVosKXJyNL7IWKgqUse/EbKTNoVLbaRSD+e6g== 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 To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, Patrick Palka 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 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org 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 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(); +}