1600adef3SRichard Smith // RUN: %clang_cc1 -fmodules -std=c++17 -verify %s 2600adef3SRichard Smith // RUN: %clang_cc1 -fmodules -std=c++17 -verify %s -DLOCAL 3600adef3SRichard Smith // expected-no-diagnostics 4600adef3SRichard Smith 5600adef3SRichard Smith #pragma clang module build A 6600adef3SRichard Smith module A {} 7600adef3SRichard Smith #pragma clang module contents 8600adef3SRichard Smith #pragma clang module begin A 9600adef3SRichard Smith inline auto f() { struct X {}; return X(); } 10600adef3SRichard Smith inline auto a = f(); 11*a62d198eSRichard Smith auto g(int); h(T t)12*a62d198eSRichard Smithtemplate<typename T> auto h(T t) { return g(t); } 13600adef3SRichard Smith #pragma clang module end 14600adef3SRichard Smith #pragma clang module endbuild 15600adef3SRichard Smith 16600adef3SRichard Smith #pragma clang module build B 17600adef3SRichard Smith module B {} 18600adef3SRichard Smith #pragma clang module contents 19600adef3SRichard Smith #pragma clang module begin B 20600adef3SRichard Smith inline auto f() { struct X {}; return X(); } 21600adef3SRichard Smith inline auto b = f(); g(int)22*a62d198eSRichard Smithauto g(int) { return 0; } 23600adef3SRichard Smith #pragma clang module end 24600adef3SRichard Smith #pragma clang module endbuild 25600adef3SRichard Smith 26600adef3SRichard Smith #ifdef LOCAL f()27600adef3SRichard Smithinline auto f() { struct X {}; return X(); } 28600adef3SRichard Smith inline auto b = f(); g(int)29*a62d198eSRichard Smithauto g(int) { return 0; } 30600adef3SRichard Smith #else 31600adef3SRichard Smith #pragma clang module import B 32600adef3SRichard Smith #endif 33600adef3SRichard Smith 34600adef3SRichard Smith #pragma clang module import A 35600adef3SRichard Smith 36600adef3SRichard Smith using T = decltype(a); 37600adef3SRichard Smith using T = decltype(b); 38*a62d198eSRichard Smith 39*a62d198eSRichard Smith int test_g = h(0); 40