Mercurial > hg > CbC > CbC_llvm
diff clang/test/Modules/seperated-member-function-definition-for-template-class.cppm @ 252:1f2b6ac9f198 llvm-original
LLVM16-1
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Aug 2023 09:04:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/Modules/seperated-member-function-definition-for-template-class.cppm Fri Aug 18 09:04:13 2023 +0900 @@ -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<class> struct base +{ + child getChild(); +}; + + +//--- child.cppm +export module package:child; + +import :base; + +export struct child : base<void> {}; + +template<class T> +child base<T>::getChild() { return {}; } + +//--- package.cppm +export module package; + +export import :base; +export import :child; + +//--- use.cpp +// expected-no-diagnostics +import package; + +int use() +{ + base<void>{}.getChild(); + base<int>{}.getChild(); + return 0; +}