Clang Project

clang_source_code/test/Modules/merge-template-pattern-visibility-2.cpp
1// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility %s -verify -Werror=undefined-inline
2
3#pragma clang module build A1
4module A1 { export * }
5#pragma clang module contents
6#pragma clang module begin A1
7template<typename T> class A {};
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
13module A2 { export * }
14#pragma clang module contents
15#pragma clang module begin A2
16#pragma clang module load A1
17template<typename T> class A {};
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
23module A3 { export * }
24#pragma clang module contents
25#pragma clang module begin A3
26template<typename T> class A {};
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}}
34bool y(A<int> o) { return f(o); } // expected-note {{instantiation of}}
35