From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by sourceware.org (Postfix) with ESMTPS id A6C463858D35 for ; Wed, 22 Nov 2023 11:33:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A6C463858D35 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 A6C463858D35 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::62c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700652803; cv=none; b=i3pq8xp0QrN1PZtUTszOfZtCn2kSHrCWa5BryhU2gyFW6DbyYClZqyaEYp033BV1QehJYw+6TBByj8vpZwwDlJ/0Qj7Qe0jpI8sE/nYbSFKm5cHwEAX67SLGJpnH7Oj7gDtofM6JFoY0KpAntv9bSYY9eui503Jm3UFN7GmkCg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700652803; c=relaxed/simple; bh=PhCZi40oadpV4wk1Q8LNSUZtLdtd52GZxTGEIUoRUtI=; h=DKIM-Signature:Message-ID:Date:From:To:Subject:MIME-Version; b=KL/awCgd7LCPkryB1nwEcEoeUHDuHCoRrwCwRg7M0HzyC2Lm1nGcoNQd6Twz6iXhAcBFOCnW35/tOcAs2419gwiHNSgosw70yiD4EO+Vur1xaYTaI0ny0ELmVio7EYSCAfCGfIlBa3LZMMnhhqlECsTyIK8zxBiTM0LYO6XOkyw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-1cc938f9612so43791885ad.1 for ; Wed, 22 Nov 2023 03:33:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700652800; x=1701257600; 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=vjeYvXyqTDb4V91jqdgzdmvrei+v1E3hfaxUWtfOCwo=; b=RBi4lgvlzFPa8I2pkPyd0ewmNexEb2ci5VXnozEa50vS7sN8kD8JvwFrqbatJBMpRt 6Nrwr/syqrZNGre5DtDNHAUB/Kpq1Wx5nlRGXD4W4NczpjApqeVN/2XIxPBS2eL0F047 BSalywaK5b7LoVBnB5bRdtBx6fgizS5c94IR20IR1mWvbP/lwMxSO8Na5pcX11K9Z86q 1pfOyOoQy85UfLSjcHHuusHuGS/0cPi5fkMN49dAFErn0Bp8dhI6urBQqkr6Ivv4+3hW iOmgM3lfobS3wTbccfu7OJCdos0hamHszu0DP31kXeTA269ukZS4VFQ5BLtj/lVCQD1L EXkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700652800; x=1701257600; 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=vjeYvXyqTDb4V91jqdgzdmvrei+v1E3hfaxUWtfOCwo=; b=E1t7VEBIn92XZReK1bF42/tepWaxkLbQVCKzFHOqtsPG5G0912IICBgBWyzAomN1y5 98pmW4HIItCOqzOD3gLydtEduX0Fm5ZYoKxwIwXGhIcDkxfap2fHSdcHwn+vxde0hBpl zgf9wz9T2GgU0xPRrhcDmMSvBVZ8/jLSVp9sR7ao0hB7RyawJRvVC+0pQIyY49PwsEYF GlhDTMZddE2ABU6d/c15I2jvQICOWQNrcAvKQXDMlx/1mvLVLVgC+diQgbtW1kQJyGBq 9XE3BZ+fMrXC68q8LZO2bdBLFYY0wLzkpWhC6iEMjlaxhvMJ73n3Rl4vHe86x4xKYSNn GaPQ== X-Gm-Message-State: AOJu0YwjcKS/84VszJROEpgvXwWzx4nthYIAIuqLLuUPM1GyJHvp/O0i E6O74bFtuGh5aBjC1nn2TS2Dl1pq0kI= X-Google-Smtp-Source: AGHT+IFarUcHa0+yr4znvgRxWkxOcUCmMcCtMSmE0aiB7pejpPQsKeEeZ7tZRjjSpchRKIvxfUpjHQ== X-Received: by 2002:a17:903:188:b0:1cf:5782:7c74 with SMTP id z8-20020a170903018800b001cf57827c74mr2343753plg.7.1700652800394; Wed, 22 Nov 2023 03:33:20 -0800 (PST) Received: from Thaum. ([124.168.116.122]) by smtp.gmail.com with ESMTPSA id t1-20020a170902bc4100b001c60a2b5c61sm5804379plz.134.2023.11.22.03.33.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 03:33:20 -0800 (PST) Message-ID: <655de700.170a0220.bbd9.fe31@mx.google.com> X-Google-Original-Message-ID: Date: Wed, 22 Nov 2023 22:33:15 +1100 From: Nathaniel Shead To: gcc-patches@gcc.gnu.org Cc: Jason Merrill , Nathan Sidwell Subject: [PATCH] c++/modules: Prevent overwriting arguments for duplicates [PR112588] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-11.2 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,URIBL_BLACK 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. I don't have write access. -- >8 -- When merging duplicate instantiations of function templates, currently read_function_def overwrites the arguments with that of the existing duplicate. This is problematic, however, since this means that the PARM_DECLs in the body of the function definition no longer match with the PARM_DECLs in the argument list, which causes issues when it comes to generating RTL. There doesn't seem to be any reason to do this replacement, so this patch removes that logic. PR c++/112588 gcc/cp/ChangeLog: * module.cc (trees_in::read_function_def): Don't overwrite arguments. gcc/testsuite/ChangeLog: * g++.dg/modules/merge-16.h: New test. * g++.dg/modules/merge-16_a.C: New test. * g++.dg/modules/merge-16_b.C: New test. Signed-off-by: Nathaniel Shead --- gcc/cp/module.cc | 2 -- gcc/testsuite/g++.dg/modules/merge-16.h | 10 ++++++++++ gcc/testsuite/g++.dg/modules/merge-16_a.C | 7 +++++++ gcc/testsuite/g++.dg/modules/merge-16_b.C | 5 +++++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/merge-16.h create mode 100644 gcc/testsuite/g++.dg/modules/merge-16_a.C create mode 100644 gcc/testsuite/g++.dg/modules/merge-16_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 4f5b6e2747a..2520ab659cc 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -11665,8 +11665,6 @@ trees_in::read_function_def (tree decl, tree maybe_template) DECL_RESULT (decl) = result; DECL_INITIAL (decl) = initial; DECL_SAVED_TREE (decl) = saved; - if (maybe_dup) - DECL_ARGUMENTS (decl) = DECL_ARGUMENTS (maybe_dup); if (context) SET_DECL_FRIEND_CONTEXT (decl, context); diff --git a/gcc/testsuite/g++.dg/modules/merge-16.h b/gcc/testsuite/g++.dg/modules/merge-16.h new file mode 100644 index 00000000000..fdb38551103 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/merge-16.h @@ -0,0 +1,10 @@ +// PR c++/112588 + +void f(int*); + +template +struct S { + void g(int n) { f(&n); } +}; + +template struct S; diff --git a/gcc/testsuite/g++.dg/modules/merge-16_a.C b/gcc/testsuite/g++.dg/modules/merge-16_a.C new file mode 100644 index 00000000000..c243224c875 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/merge-16_a.C @@ -0,0 +1,7 @@ +// PR c++/112588 +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi merge16 } + +module; +#include "merge-16.h" +export module merge16; diff --git a/gcc/testsuite/g++.dg/modules/merge-16_b.C b/gcc/testsuite/g++.dg/modules/merge-16_b.C new file mode 100644 index 00000000000..8c7b1f0511f --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/merge-16_b.C @@ -0,0 +1,5 @@ +// PR c++/112588 +// { dg-additional-options "-fmodules-ts" } + +#include "merge-16.h" +import merge16; -- 2.42.0