From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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-Google-Smtp-Source: AGHT+IGb67IukJaTtmjeEwmmcVSi1o2IY3st0rSG/1HV/70Pkqg0ngBZpziwpORnysjPdC8Iyz4VYg== 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-Type: text/plain; charset=us-ascii 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 List-Id: 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(); +} -- 2.43.2