mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 19:45:40 -04:00

We can't read a deduced return type until we are sure that the types referred to by it are not in the middle of being loaded. So defer all reading of such deduced return types until the end of the recursive deserialization step. Also, when we load a function type that has a deduced return type, update all other redeclarations of the function to have that deduced return type. llvm-svn: 338798
40 lines
917 B
C++
40 lines
917 B
C++
// RUN: %clang_cc1 -fmodules -std=c++17 -verify %s
|
|
// RUN: %clang_cc1 -fmodules -std=c++17 -verify %s -DLOCAL
|
|
// expected-no-diagnostics
|
|
|
|
#pragma clang module build A
|
|
module A {}
|
|
#pragma clang module contents
|
|
#pragma clang module begin A
|
|
inline auto f() { struct X {}; return X(); }
|
|
inline auto a = f();
|
|
auto g(int);
|
|
template<typename T> auto h(T t) { return g(t); }
|
|
#pragma clang module end
|
|
#pragma clang module endbuild
|
|
|
|
#pragma clang module build B
|
|
module B {}
|
|
#pragma clang module contents
|
|
#pragma clang module begin B
|
|
inline auto f() { struct X {}; return X(); }
|
|
inline auto b = f();
|
|
auto g(int) { return 0; }
|
|
#pragma clang module end
|
|
#pragma clang module endbuild
|
|
|
|
#ifdef LOCAL
|
|
inline auto f() { struct X {}; return X(); }
|
|
inline auto b = f();
|
|
auto g(int) { return 0; }
|
|
#else
|
|
#pragma clang module import B
|
|
#endif
|
|
|
|
#pragma clang module import A
|
|
|
|
using T = decltype(a);
|
|
using T = decltype(b);
|
|
|
|
int test_g = h(0);
|