| // 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 |
| |
| // Test again with reduced BMI |
| // RUN: rm -rf %t |
| // RUN: mkdir %t |
| // RUN: split-file %s %t |
| // |
| // RUN: %clang_cc1 -std=c++20 %t/base.cppm -emit-reduced-module-interface -o %t/package-base.pcm |
| // RUN: %clang_cc1 -std=c++20 %t/child.cppm -emit-reduced-module-interface -o %t/package-child.pcm \ |
| // RUN: -fprebuilt-module-path=%t |
| // RUN: %clang_cc1 -std=c++20 %t/package.cppm -emit-reduced-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; |
| } |