From patchwork Fri Mar 5 13:30:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 1447832 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=ROWIZahj; dkim-atps=neutral Received: from sourceware.org (unknown [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DsTBM2vzRz9sWf for ; Sat, 6 Mar 2021 00:30:17 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 45E283893C11; Fri, 5 Mar 2021 13:30:14 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-qv1-xf2b.google.com (mail-qv1-xf2b.google.com [IPv6:2607:f8b0:4864:20::f2b]) by sourceware.org (Postfix) with ESMTPS id 39B90386F833 for ; Fri, 5 Mar 2021 13:30:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 39B90386F833 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=acm.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=nathanmsidwell@gmail.com Received: by mail-qv1-xf2b.google.com with SMTP id 15so922752qvp.13 for ; Fri, 05 Mar 2021 05:30:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=I5lz1kpClaW8jNJykmiQReC8xIh3x1Trht7BaaLOb10=; b=ROWIZahj1Vgkd5qILqRVlAiKSWudUDa2TVvR3T1SgWkAhZ3yXYdUaNLVrcbB7jvm6f zT4zZRq1ugWP0udBVRxojPvkZx+Aw2R+oplCOJYoMmtP63ZI2JwyVbDs/nbf9K5yVB0G jo7B5aLbrjZdG1/mvberd4djwZNc+gJIcpiTVouywXGw2YTArRQjK8Iog2mIuRw4cAVn X7LhQXYRYFaOC1cYFxEJbTxcWawfM0rwdm6PJeX1YW48OWkUtrAOyuzS7sW6LYM1Yy6A 7AmOyshk5Qgj55+/3sU9Uc5WabPUREt/2tTs+ipLxrfYEDp0Wbw+d834JS+YqSDF5kMG D8nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:to:from:subject:message-id:date :user-agent:mime-version:content-language; bh=I5lz1kpClaW8jNJykmiQReC8xIh3x1Trht7BaaLOb10=; b=H7nFsaU4WkEXW20Zd++pBiHcBJJ4HN/KGfE39TBk7YZftS6Jgj3PhvgHAoqHc2BxF/ Nwwx4aD30FfXrJx6zkEcS9aavmZkIqDHFtNwTjZjcJ5m4U4lx48TZdW5wP4fCCUAxVva EL2gQpTXeJMkA6MwRJzWLhLyyL4+vVCspiGgRry37JgOypIJcC2xTdgGRmAbEhffALwV GiG1blvtsMmdJkwOFk7ZW0DRbYPwdSmtKpyp1a6+cuqm7x15Jwke4iMy/4f/95pD9I/8 mS17aQLMrZOf7c0O05knwEuRlrENH59gB9yzPR7SyJcj0vcFKJqORmMegaZ86UNGi/4v YGfw== X-Gm-Message-State: AOAM533Y45hkYhZtVvWC3Hyb0tKEC/AqcmHUfyII0TZWEZu3formvWp3 moeoI2CyMtgF5puY/ibsjg0= X-Google-Smtp-Source: ABdhPJyzOoQtB8dBp2NbORWqZygeyVWWJptlbvouZAQKYGR6nVhNnKYYxigqNOdbf2TfBoQGBaE8IA== X-Received: by 2002:ad4:542b:: with SMTP id g11mr9141531qvt.47.1614951011604; Fri, 05 Mar 2021 05:30:11 -0800 (PST) Received: from ?IPv6:2620:10d:c0a8:1102:d881:41ef:fad8:b2db? ([2620:10d:c091:480::1:3f0d]) by smtp.googlemail.com with ESMTPSA id f27sm1727226qkh.118.2021.03.05.05.30.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Mar 2021 05:30:10 -0800 (PST) To: GCC Patches From: Nathan Sidwell Subject: c++: instantiating imported specializations [PR 99389] Message-ID: Date: Fri, 5 Mar 2021 08:30:09 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 Content-Language: en-US X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: , Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" When an incomplete class specialization is imported, and is completed by instantiation, we were failing to mark the instantiation, and thus didn't stream it out. Leading to errors in importing as we had members of an incomplete type. PR c++/99389 gcc/cp/ * pt.c (instantiate_class_template_1): Set instantiating module here. gcc/testsuite/ * g++.dg/modules/pr99389_a.H: New. * g++.dg/modules/pr99389_b.C: New. * g++.dg/modules/pr99389_c.C: New. diff --git c/gcc/cp/pt.c w/gcc/cp/pt.c index 83589101c0d..8ca3dc8ec2b 100644 --- c/gcc/cp/pt.c +++ w/gcc/cp/pt.c @@ -11816,6 +11816,8 @@ instantiate_class_template_1 (tree type) input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) = DECL_SOURCE_LOCATION (typedecl); + set_instantiating_module (TYPE_NAME (type)); + TYPE_PACKED (type) = TYPE_PACKED (pattern); SET_TYPE_ALIGN (type, TYPE_ALIGN (pattern)); TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern); diff --git c/gcc/testsuite/g++.dg/modules/pr99389_a.H w/gcc/testsuite/g++.dg/modules/pr99389_a.H new file mode 100644 index 00000000000..cbb64df7562 --- /dev/null +++ w/gcc/testsuite/g++.dg/modules/pr99389_a.H @@ -0,0 +1,20 @@ +// PR 99389 failed to stream class specialization +// { dg-module-do link } +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } +template +class basic_string_view +{ +public: + basic_string_view(const _CharT* __str) noexcept + {} + bool + empty() const noexcept + { return !_M_len; } + +private: + unsigned _M_len; +}; + +using string_view = basic_string_view; + diff --git c/gcc/testsuite/g++.dg/modules/pr99389_b.C w/gcc/testsuite/g++.dg/modules/pr99389_b.C new file mode 100644 index 00000000000..f8d010e453d --- /dev/null +++ w/gcc/testsuite/g++.dg/modules/pr99389_b.C @@ -0,0 +1,12 @@ +// { dg-additional-options {-fmodules-ts -fdump-lang-module } } +export module hello; +// { dg-module-cmi hello } + +import "pr99389_a.H"; + +export inline bool Check (const string_view& n) +{ + return !n.empty (); +} + +// { dg-final { scan-lang-dump {Pending specialization '::basic_string_view' entity:. section:. keyed to '::basic_string_view'} module } } diff --git c/gcc/testsuite/g++.dg/modules/pr99389_c.C w/gcc/testsuite/g++.dg/modules/pr99389_c.C new file mode 100644 index 00000000000..f31847dd928 --- /dev/null +++ w/gcc/testsuite/g++.dg/modules/pr99389_c.C @@ -0,0 +1,7 @@ +// { dg-additional-options -fmodules-ts } +import hello; + +int main () +{ + return Check ("World") ? 0 : 1; +}