1// This comes from the issue report of MSVC 2// (https://developercommunity.visualstudio.com/t/c20-modules-unresolved-external-symbol/10049210). 3// 4// RUN: rm -rf %t 5// RUN: mkdir %t 6// RUN: split-file %s %t 7// 8// RUN: %clang_cc1 -std=c++20 %t/base.cppm -emit-module-interface -o %t/package-base.pcm 9// RUN: %clang_cc1 -std=c++20 %t/child.cppm -emit-module-interface -o %t/package-child.pcm \ 10// RUN: -fprebuilt-module-path=%t 11// RUN: %clang_cc1 -std=c++20 %t/package.cppm -emit-module-interface -o %t/package.pcm \ 12// RUN: -fprebuilt-module-path=%t 13// RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t 14 15// Test again with reduced BMI 16// RUN: rm -rf %t 17// RUN: mkdir %t 18// RUN: split-file %s %t 19// 20// RUN: %clang_cc1 -std=c++20 %t/base.cppm -emit-reduced-module-interface -o %t/package-base.pcm 21// RUN: %clang_cc1 -std=c++20 %t/child.cppm -emit-reduced-module-interface -o %t/package-child.pcm \ 22// RUN: -fprebuilt-module-path=%t 23// RUN: %clang_cc1 -std=c++20 %t/package.cppm -emit-reduced-module-interface -o %t/package.pcm \ 24// RUN: -fprebuilt-module-path=%t 25// RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t 26 27//--- base.cppm 28export module package:base; 29 30export struct child; 31 32export 33template<class> struct base 34{ 35 child getChild(); 36}; 37 38 39//--- child.cppm 40export module package:child; 41 42import :base; 43 44export struct child : base<void> {}; 45 46template<class T> 47child base<T>::getChild() { return {}; } 48 49//--- package.cppm 50export module package; 51 52export import :base; 53export import :child; 54 55//--- use.cpp 56// expected-no-diagnostics 57import package; 58 59int use() 60{ 61 base<void>{}.getChild(); 62 base<int>{}.getChild(); 63 return 0; 64} 65