1 // RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility %s -verify -Werror=undefined-inline 2 3 #pragma clang module build A1 4 module A1 { export * } 5 #pragma clang module contents 6 #pragma clang module begin A1 7 template<typename T> class A {}; f(const A<T> &)8template<typename T> inline bool f(const A<T>&) { return T::error; } 9 #pragma clang module end 10 #pragma clang module endbuild 11 12 #pragma clang module build A2 13 module A2 { export * } 14 #pragma clang module contents 15 #pragma clang module begin A2 16 #pragma clang module load A1 17 template<typename T> class A {}; f(const A<T> &)18template<typename T> inline bool f(const A<T>&) { return T::error; } 19 #pragma clang module end 20 #pragma clang module endbuild 21 22 #pragma clang module build A3 23 module A3 { export * } 24 #pragma clang module contents 25 #pragma clang module begin A3 26 template<typename T> class A {}; f(const A<T> &)27template<typename T> inline bool f(const A<T>&) { return T::error; } 28 #pragma clang module end 29 #pragma clang module endbuild 30 31 #pragma clang module load A3 32 #pragma clang module import A2 33 // expected-error@* {{cannot be used prior to}} y(A<int> o)34bool y(A<int> o) { return f(o); } // expected-note {{instantiation of}} 35