From 201c10537a3c1ad4a86b840834c204575d10d589 Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Wed, 9 Aug 2023 11:13:39 +0800 Subject: [PATCH] [NFC] [C++20] [Modules] Adopt a test case from MSVC Add a test case from MSVC (https://developercommunity.visualstudio.com/t/c20-modules-unresolved-external-symbol/10049210) to cover more tests. --- ...unction-definition-for-template-class.cppm | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 clang/test/Modules/seperated-member-function-definition-for-template-class.cppm diff --git a/clang/test/Modules/seperated-member-function-definition-for-template-class.cppm b/clang/test/Modules/seperated-member-function-definition-for-template-class.cppm new file mode 100644 index 000000000000..e32da39d9df1 --- /dev/null +++ b/clang/test/Modules/seperated-member-function-definition-for-template-class.cppm @@ -0,0 +1,52 @@ +// This comes from the issue report of MSVC +// (https://developercommunity.visualstudio.com/t/c20-modules-unresolved-external-symbol/10049210). +// +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/base.cppm -emit-module-interface -o %t/package-base.pcm +// RUN: %clang_cc1 -std=c++20 %t/child.cppm -emit-module-interface -o %t/package-child.pcm \ +// RUN: -fprebuilt-module-path=%t +// RUN: %clang_cc1 -std=c++20 %t/package.cppm -emit-module-interface -o %t/package.pcm \ +// RUN: -fprebuilt-module-path=%t +// RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t + +//--- base.cppm +export module package:base; + +export struct child; + +export +template struct base +{ + child getChild(); +}; + + +//--- child.cppm +export module package:child; + +import :base; + +export struct child : base {}; + +template +child base::getChild() { return {}; } + +//--- package.cppm +export module package; + +export import :base; +export import :child; + +//--- use.cpp +// expected-no-diagnostics +import package; + +int use() +{ + base{}.getChild(); + base{}.getChild(); + return 0; +}