// RUN: %clang_cc1 -std=c++14 -fmodules -verify %s -emit-llvm-only // expected-no-diagnostics #pragma clang module build A module A {} #pragma clang module contents #pragma clang module begin A template auto f() { return []{}; } #pragma clang module end #pragma clang module endbuild #pragma clang module build B module B {} #pragma clang module contents #pragma clang module begin B #pragma clang module import A inline auto x1() { return f(); } inline auto z() { return []{}; } inline auto x2() { return z(); } #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 import A inline auto y1() { return f(); } inline auto z() { return []{}; } inline auto y2() { return z(); } inline auto q() { return []{}; } inline auto y3() { return q(); } #pragma clang module end #pragma clang module endbuild inline auto q() { return []{}; } inline auto x3() { return q(); } #pragma clang module import B #pragma clang module import C using T = decltype(x1); using T = decltype(y1); using U = decltype(x2); using U = decltype(y2); using V = decltype(x3); using V = decltype(y3); #pragma clang module import A void (*p)() = f();