From patchwork Tue Sep 20 19:54:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 1323 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5044:0:0:0:0:0 with SMTP id h4csp1618989wrt; Tue, 20 Sep 2022 12:55:53 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4iy4ibpxsyC9UoEWuzANheWTWhkM1qhXczvfmsAScdpFTWCc0GWqrtNoEKuovZOwnQWYoO X-Received: by 2002:aa7:cd05:0:b0:44f:2776:2ff with SMTP id b5-20020aa7cd05000000b0044f277602ffmr21346163edw.49.1663703753452; Tue, 20 Sep 2022 12:55:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663703753; cv=none; d=google.com; s=arc-20160816; b=RcHSwygNile1ljzTTNTaIDymmhiDU2kPN2Su81lOSBZ/qumQUrIRKwIBk65ZKL1cKR cetqAxU0caVVhi/CyE6qcdrucJnUEhT+4aI+Z5HabxaXI0zQCWemD6ThJ1vlv3NLB7fZ icniSacGp0iNTTtLKySceIeooQUz2vyEekl/xJkX4DcZjhSuLA/FJMcjvexF1/udY4GG reKjMkF50LfqGTzA6MCYshQECWDaVNcYbylKfOYq91GoXREtqOiDI8sVEX4whznw8eef XgTb30LZ3lQ+mi6KR6jpql2pFU/ji6bgPNSgNw2t8HPF9iK05Om6NvHRy2FsqVImWH0D pMkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:to :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=ES4pYw272r65+HdeYMqhu6NCFrHw5aUDzfwA1qTa5vQ=; b=qgzhOBXiLS2P/91qQFgGMefB33il5D+dWYVXr0FLkFNiHOlRJqlgXCyKp4F8/g9Rvp 5Qix1HWHudpP3Df77PkQRES0mr5DAYJNsfB32Rzg1HYsvgxw3AaZciXIzR2uayRJy6J9 jm9W98oZS0nJ23qY9LWNxT9AzrR4LuLcr9hFP25vi/PbdIbmhic9aAuanZzFGfbDtpgd E/8bglbkqHHJGZDrb6SyGmOUg5cId5OPQumnKEGAq1tARu+dh2ce/7Cbeao1NHbCY4gh 4530E5gvQf3GSzdvhU5fk2f4AZZlYjzfHotOg4M5ZxDpbdxhHFAxkUzg+efSnFgr3OvN zYpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ByQCKh+D; 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=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id sc9-20020a1709078a0900b0073d76d8af85si784871ejc.231.2022.09.20.12.55.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Sep 2022 12:55:53 -0700 (PDT) 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=@gcc.gnu.org header.s=default header.b=ByQCKh+D; 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=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1253A3857C60 for ; Tue, 20 Sep 2022 19:55:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1253A3857C60 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663703744; bh=ES4pYw272r65+HdeYMqhu6NCFrHw5aUDzfwA1qTa5vQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=ByQCKh+D3sUYeZ5qY5Tyg8Tn/DN9U2NW0kHHa772yNEOVQWZlEbRWJhsyUaFmqAmt tXDdyky3hlrkg+rpD81RRdAnLDLnG9+vzmtkNep+4uihAk1XdVwITKHp3NLGfqiRWa qT1fmJv7TGQkLLcg7rjK61r6HPK5fypVjibarhV4= 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 CD3A53858C55 for ; Tue, 20 Sep 2022 19:55:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CD3A53858C55 Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-607-IuDYvCzLNnW7_7586lMJtA-1; Tue, 20 Sep 2022 15:54:59 -0400 X-MC-Unique: IuDYvCzLNnW7_7586lMJtA-1 Received: by mail-qk1-f198.google.com with SMTP id bl17-20020a05620a1a9100b006cdf19243acso2778215qkb.4 for ; Tue, 20 Sep 2022 12:54:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date; bh=ES4pYw272r65+HdeYMqhu6NCFrHw5aUDzfwA1qTa5vQ=; b=vZ51qZCebR12OFDcOhppRmv4SBXB6Fuw3Z5KS+BTQFLUh2Zvth3CV9lyPaCPJqMV3L jzuGzaun6Pz4cztgqwCGgxK4IGQA86NtxElagitT4wPE4q8rfwUQLCjQOyBv5fQwwbE+ XbrEazcOeeedJg39rAICmEL42S00GpgFLcIReldMwAfs13JVjaIY3rz70fJhKoO5zly0 RzGKTl61tpndFjPChYdfMTwMFDkf6euhTZEPONuoXUBZGQz7ZyZOI2qZVYnKEDqTeOCD b+HGwZXsE9wwWetwueq6x69Anh+EnmJuScstcqD6DVI8X3V6CM/mMFjA4uvhTlj+Uwem IQXw== X-Gm-Message-State: ACrzQf3WpiZ2eXHpAaWGE+Xr5/q6Mugzs+2wF+ZbU7PdxOw6DWHDOYLJ lSgzFY5dV34E9MQkmxxWnN7WvU4QVdmouhJSaLeS/ktNa1lVP0wK4d5vFOXiEVhtNwdKj1oMig2 gF/UZDHok29k+OLkELkf0DDKvHLO0IXj9PyWUDPMaluPSvURWc2SxVg21t8jshZvyqSY= X-Received: by 2002:a0c:e190:0:b0:49c:cd5e:53d with SMTP id p16-20020a0ce190000000b0049ccd5e053dmr21323030qvl.71.1663703698378; Tue, 20 Sep 2022 12:54:58 -0700 (PDT) X-Received: by 2002:a0c:e190:0:b0:49c:cd5e:53d with SMTP id p16-20020a0ce190000000b0049ccd5e053dmr21323014qvl.71.1663703698115; Tue, 20 Sep 2022 12:54:58 -0700 (PDT) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id bm22-20020a05620a199600b006bb9125363fsm419439qkb.121.2022.09.20.12.54.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Sep 2022 12:54:57 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2] c++: modules and non-dependent auto deduction Date: Tue, 20 Sep 2022 15:54:30 -0400 Message-Id: <20220920195431.1527042-1-ppalka@redhat.com> X-Mailer: git-send-email 2.38.0.rc0.52.gdda7228a83 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.4 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_LOW, SPF_HELO_NONE, SPF_NONE, TXREP 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Cc: nathan@acm.org Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1744519827150666614?= X-GMAIL-MSGID: =?utf-8?q?1744519827150666614?= The modules streaming code seems to rely on the invariant that a TEMPLATE_DECL and its DECL_TEMPLATE_RESULT have the same TREE_TYPE. But for a templated VAR_DECL with deduced non-dependent type, the two TREE_TYPEs end up diverging: cp_finish_decl deduces the type of the initializer ahead of time and updates the TREE_TYPE of the VAR_DECL, but neglects to update the corresponding TEMPLATE_DECL as well, which leads to a "conflicting global module declaration" error for each of the __phase_alignment decls in the below testcase (and for the xtreme-header testcases if we try including ). This patch makes cp_finish_decl update the TREE_TYPE of the corresponding TEMPLATE_DECL so that the invariant is maintained. Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for trunk? gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): After updating the deduced type of a VAR_DECL, also update the corresponding TEMPLATE_DECL if there is one. gcc/testsuite/ChangeLog: * g++.dg/modules/auto-3.h: New test. * g++.dg/modules/auto-3_a.H: New test. * g++.dg/modules/auto-3_b.C: New test. --- gcc/cp/decl.cc | 6 ++++++ gcc/testsuite/g++.dg/modules/auto-3.h | 10 ++++++++++ gcc/testsuite/g++.dg/modules/auto-3_a.H | 4 ++++ gcc/testsuite/g++.dg/modules/auto-3_b.C | 4 ++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/g++.dg/modules/auto-3.h create mode 100644 gcc/testsuite/g++.dg/modules/auto-3_a.H create mode 100644 gcc/testsuite/g++.dg/modules/auto-3_b.C diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 070f673c3a2..80467c19254 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -8180,6 +8180,12 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, return; } cp_apply_type_quals_to_decl (cp_type_quals (type), decl); + + /* Update the type of the corresponding TEMPLATE_DECL to match. */ + if (DECL_LANG_SPECIFIC (decl) + && DECL_TEMPLATE_INFO (decl) + && DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) == decl) + TREE_TYPE (DECL_TI_TEMPLATE (decl)) = type; } if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node) diff --git a/gcc/testsuite/g++.dg/modules/auto-3.h b/gcc/testsuite/g++.dg/modules/auto-3.h new file mode 100644 index 00000000000..f129433cbcb --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/auto-3.h @@ -0,0 +1,10 @@ +template +struct __tree_barrier { + static const auto __phase_alignment_1 = 0; + + template + static const auto __phase_alignment_2 = 0; +}; + +template +inline auto __phase_alignment_3 = 0; diff --git a/gcc/testsuite/g++.dg/modules/auto-3_a.H b/gcc/testsuite/g++.dg/modules/auto-3_a.H new file mode 100644 index 00000000000..25a7a73e73e --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/auto-3_a.H @@ -0,0 +1,4 @@ +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } + +#include "auto-3.h" diff --git a/gcc/testsuite/g++.dg/modules/auto-3_b.C b/gcc/testsuite/g++.dg/modules/auto-3_b.C new file mode 100644 index 00000000000..03b6d46f476 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/auto-3_b.C @@ -0,0 +1,4 @@ +// { dg-additional-options "-fmodules-ts -fno-module-lazy" } + +#include "auto-3.h" +import "auto-3_a.H";