From patchwork Thu Feb 29 21:28:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathaniel Shead X-Patchwork-Id: 208530 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2097:b0:108:e6aa:91d0 with SMTP id gs23csp691308dyb; Thu, 29 Feb 2024 13:28:56 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXRYneOtAkp7KAnWbuBjhOKO5b0a488D38r0iHw7W4bqPwMOZKh1INr3dT/XQDHC80H17QyQZ+IKARoTxXBiu2QehXj8A== X-Google-Smtp-Source: AGHT+IFClIdCx9GHaA5bkKm9Oc1RwWosQ4tTuWhxk9CfMU0jS86G32y+BFjnlbjrqxVmCJ8DSFKX X-Received: by 2002:a05:6102:3bd1:b0:471:e8d5:8c8c with SMTP id a17-20020a0561023bd100b00471e8d58c8cmr3477565vsv.26.1709242136565; Thu, 29 Feb 2024 13:28:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709242136; cv=pass; d=google.com; s=arc-20160816; b=E2VrYDh1nrJc5DO6i95GjDxPQdj0wDoopvtYiPjg1P9/Zn2kWk6k+yZrjjy0ICxy96 k7+XpDkbBmNr0LXpCa0yb2ohu1jmPiPpgzE6Wyo7V583w9udw0Oec6a0Mnj/h7gZfd+K J8nywSQZJZD1AEDVz0m/dgXgrb/q0EMU7TMyi5MRIYvrXxHadO+6543OmKqBSFjbceMR UgNxyfuQEoRqSWrQq9B5HIHsnkslUClUiIC5GOgvoCyxUFbGRPHujcCZEKaHAT9Xj4rS nn0m0P04Rd/nJRMFAkUnqZsRRyf2mMROFFllrDKLk49a74oBUeU8whZQTLg/59CHy5De XfTw== 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-disposition :mime-version:subject:cc:to:from:date:message-id:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=P48+NwqD4fWVka1M8WUBZnH8tS3iKKfrjrIq8VyTpuA=; fh=PSfnKtImOwcFiHTY31kD+1EEfyCGdToyJVXnD0Outng=; b=N3yqFlZ0idG3SwQBxyMhvtjMAzyqAJ25U9bIly7UmU0OUUpIOzsNUzbRBfkvv27mDO VjAjzKU9jlAk6EoA9GPlJFbQDIBjG0KRXDGhYXJF2xcftFLjvZ5SY0kMKBG6i7cwEBsB DisY/QiWZuenBdGdgfmpG8Z0/H+LjHEBPF4PvRxjqnUMHyK9Np7dlCfs41iqhxpNLH41 fDzb4NcbbfROhQnFfKGJHKSkP6YnvWTEMW9Oc0SqxfiWSooa++32J+kaRPUj263duK42 tFrR98B6hC09GeEpVF+yg9aj20oo6CalDViRCrHbusLDMo8XYhtrQAi+xEWjMz64QJ4s hy3Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=dO3efm+Y; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id s11-20020ac8758b000000b0042eba75807dsi1946918qtq.353.2024.02.29.13.28.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Feb 2024 13:28:56 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=dO3efm+Y; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4053C385840A for ; Thu, 29 Feb 2024 21:28:56 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ot1-x332.google.com (mail-ot1-x332.google.com [IPv6:2607:f8b0:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id F2FE63858D34 for ; Thu, 29 Feb 2024 21:28:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F2FE63858D34 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F2FE63858D34 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709242089; cv=none; b=n4N8/SDD8KqRnzlP/CCpi7ZavVE7VCCYT8SCPtB8jdYJAdMM8gNce/ZkZILqTbbpboVJYeET2hfr39jGDgf037zw85F+MFKQZSBZyWnHV2fNhSh6yFoGuRt7HYdWoz+QjFO1HyfLIz5co1bawt9YT2bMGWJ+qF+kM9njREsoxlc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709242089; c=relaxed/simple; bh=FO7/pp02ZwAHJiOmML45espYjWG1YU7EM4dyyxPM1Nw=; h=DKIM-Signature:Message-ID:Date:From:To:Subject:MIME-Version; b=xC68Q5FMrVLFmJeWDxq8rZm95WZE/1revYm3+Ei84ZO6yE2M5YI1vDT4jYEu7VzsU4jAl7tuY8Bu4j+QIweJO3Lm3rHedjLCTpORQ16VjJqFltQbWGRHj9f5C6XMjawpx2WCH0aEHYzOF813PzX78JP+C4c0go9fAstqbS6FRvY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-6e4953d801bso752381a34.2 for ; Thu, 29 Feb 2024 13:28:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709242085; x=1709846885; darn=gcc.gnu.org; h=content-disposition:mime-version:subject:cc:to:from:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=P48+NwqD4fWVka1M8WUBZnH8tS3iKKfrjrIq8VyTpuA=; b=dO3efm+YzRb1PjfGWiUDpNWBq/UKFQ8ljQG361sql5bFRYbhwS5/MbSiR4FCHS5LzZ RFtiZYoIMt2P6Q3lH3OvJx0pEexjdlpNnuuSpSoQn7rcMzdfiYNZsqRzDU3LJ4ALCfl9 EIs/LDB4aoMKXcKK97ftMB/Lg8l9mM9Wok29TzJonR8oXgFQrvn0YM468CCptS1hL2o4 1iEjsh7uz9oG9wlmkd1BACPJSrMUZtSS51sIxR9iLJsMl3/eluDIlduLaTDa41x2QHqB KZlRhoLq4MZDpeu8aYB5pb4dk2hmA5fWXLEgGsD1xqw4GOFZQoaEaUIzU5tBbnKPtKtJ gm6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709242085; x=1709846885; h=content-disposition:mime-version:subject:cc:to:from:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=P48+NwqD4fWVka1M8WUBZnH8tS3iKKfrjrIq8VyTpuA=; b=B5ow7syg+IszI3/EEJidGLuG7SEakVCLi0hznWjo5VcFB1PQ5Vw8TIap9FT6DLngb9 MlF54lwbmdQoK8JjbVcG/xiHp7mq18h34EajZM2LJmsQWGMOi9DalEOsEaPWH3YagTq/ k4tlJvPzOxPocX0nNAM8quQqSDbaJ2Nb1GK1ScjZdFLOc098y1cjGMX5UOywrRCJBBGa TbsZfoSJ9oQSdDlu2zGixtZn3xrZpCgOm0DPHkIjbMRIRqW7jgaFbIXUAGXo8EkZIIoD INjRUDL25yduVI7swG1rr6No5BLZKG+0rwbhIR0nxU7tWhXuznlzkOMv3Fa0mNhSMJvA +8KQ== X-Gm-Message-State: AOJu0YyinRLZHy1IJayuSKGC3+n0/IKnNyv+/Ze5XUFH8t/apJobRInh GlFLB3kxbw+eMxXowVWtnbgncv7vxr9YZrYbAPt6WDmBiXYuQ1TcLvfjgHXx X-Received: by 2002:a9d:741a:0:b0:6e4:795c:69ed with SMTP id n26-20020a9d741a000000b006e4795c69edmr3192716otk.38.1709242085206; Thu, 29 Feb 2024 13:28:05 -0800 (PST) Received: from Thaum. (110-175-172-107.tpgi.com.au. [110.175.172.107]) by smtp.gmail.com with ESMTPSA id p26-20020aa79e9a000000b006e59688b828sm1660675pfq.19.2024.02.29.13.28.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Feb 2024 13:28:04 -0800 (PST) Message-ID: <65e0f6e4.a70a0220.12e52.86bd@mx.google.com> X-Google-Original-Message-ID: Date: Fri, 1 Mar 2024 08:28:00 +1100 From: Nathaniel Shead To: gcc-patches@gcc.gnu.org Cc: Jason Merrill , Nathan Sidwell Subject: [PATCH] c++: Ensure DECL_CONTEXT is set for temporary vars [PR114005] MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792270282344999117 X-GMAIL-MSGID: 1792270282344999117 Bootstrapped and regtested on x86_64-pc-linux-gnu, OK for trunk? Alternatively we could update 'DECL_CONTEXT' only for 'make_temporary_var_for_ref_to_temp' in call.cc, as a more targetted fix, but I felt that this way it'd also fix any other similar issues that have gone uncaught so far. -- >8 -- Modules streaming requires DECL_CONTEXT to be set for anything streamed. This patch ensures that 'create_temporary_var' does set a DECL_CONTEXT for these variables (such as the backing storage for initializer_lists) even if not inside a function declaration. PR c++/114005 gcc/cp/ChangeLog: * init.cc (create_temporary_var): Set DECL_CONTEXT to current_namespace if at namespace scope. gcc/testsuite/ChangeLog: * g++.dg/modules/pr114005_a.C: New test. * g++.dg/modules/pr114005_b.C: New test. Signed-off-by: Nathaniel Shead --- gcc/cp/init.cc | 2 ++ gcc/testsuite/g++.dg/modules/pr114005_a.C | 8 ++++++++ gcc/testsuite/g++.dg/modules/pr114005_b.C | 7 +++++++ 3 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/modules/pr114005_a.C create mode 100644 gcc/testsuite/g++.dg/modules/pr114005_b.C diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index ac37330527e..e6fca7b3226 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -4258,6 +4258,8 @@ create_temporary_var (tree type) DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; DECL_CONTEXT (decl) = current_function_decl; + if (!DECL_CONTEXT (decl)) + DECL_CONTEXT (decl) = current_namespace; return decl; } diff --git a/gcc/testsuite/g++.dg/modules/pr114005_a.C b/gcc/testsuite/g++.dg/modules/pr114005_a.C new file mode 100644 index 00000000000..404683484ec --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr114005_a.C @@ -0,0 +1,8 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi M } + +module; +#include + +export module M; +export constexpr std::initializer_list foo{ 1, 2, 3 }; diff --git a/gcc/testsuite/g++.dg/modules/pr114005_b.C b/gcc/testsuite/g++.dg/modules/pr114005_b.C new file mode 100644 index 00000000000..88317ce11f8 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr114005_b.C @@ -0,0 +1,7 @@ +// { dg-additional-options "-fmodules-ts" } + +import M; + +int main() { + return foo.size(); +}