// RUN: %clang_cc1 -fmodules -std=c++17 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s #pragma clang module build A module A {} #pragma clang module contents #pragma clang module begin A template T f(T v) { v(); return v; } inline auto g() { int n = 0; return f([=] { return n; }); } template constexpr T f2(T v) { v(); return v; } constexpr auto g2() { int n = 0; return f2([=] { return n; }); } #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 T f(T v) { v(); return v; } inline auto g() { int n = 0; return f([=] { return n; }); } template constexpr T f2(T v) { v(); return v; } constexpr auto g2() { int n = 0; return f2([=] { return n; }); } #pragma clang module end #pragma clang module endbuild #pragma clang module import A #pragma clang module import B // CHECK: define {{.*}}use_g int use_g() { return g()(); } static_assert(g2()() == 0);