// RUN: %clang_cc1 -fmodules -emit-llvm-only %s -verify #pragma clang module build A module A {} #pragma clang module contents #pragma clang module begin A template<typename T> void f(const T&) { T::error; } #pragma clang module end #pragma clang module endbuild #pragma clang module build B module B {} #pragma clang module contents #pragma clang module begin B template<typename T> void f(const T&) { T::error; } #pragma clang module end #pragma clang module endbuild #pragma clang module build C module C {} #pragma clang module contents #pragma clang module begin C #pragma clang module load B template<typename T> void f(const T&) { T::error; } #pragma clang module end #pragma clang module endbuild #pragma clang module load A inline void f() {} void x() { f(); } #pragma clang module import C // expected-error@* {{cannot be used prior to}} void y(int n) { f(n); } // expected-note {{instantiation of}}