xref: /llvm-project/clang/test/Modules/merge-deduced-return.cpp (revision a62d198ef5cef0500ea11b4c0c078c024e72f175)
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 Smith template<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 Smith auto g(int) { return 0; }
23600adef3SRichard Smith #pragma clang module end
24600adef3SRichard Smith #pragma clang module endbuild
25600adef3SRichard Smith 
26600adef3SRichard Smith #ifdef LOCAL
f()27600adef3SRichard Smith inline auto f() { struct X {}; return X(); }
28600adef3SRichard Smith inline auto b = f();
g(int)29*a62d198eSRichard Smith auto 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