61 lines · cpp
1// RUN: %clang_cc1 -fmodules -std=c++17 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s2// RUN: %clang_cc1 -fmodules -std=c++17 -emit-llvm %s -o - -triple x86_64-linux-gnu -fexperimental-new-constant-interpreter | FileCheck %s3 4#pragma clang module build A5module A {}6#pragma clang module contents7#pragma clang module begin A8template<typename T> T f(T v) {9 v();10 return v;11}12inline auto g() {13 int n = 0;14 return f([=] { return n; });15}16 17template<typename T> constexpr T f2(T v) {18 v();19 return v;20}21constexpr auto g2() {22 int n = 0;23 return f2([=] { return n; });24}25#pragma clang module end26#pragma clang module endbuild27 28#pragma clang module build B29module B {}30#pragma clang module contents31#pragma clang module begin B32template<typename T> T f(T v) {33 v();34 return v;35}36inline auto g() {37 int n = 0;38 return f([=] { return n; });39}40 41template<typename T> constexpr T f2(T v) {42 v();43 return v;44}45constexpr auto g2() {46 int n = 0;47 return f2([=] { return n; });48}49#pragma clang module end50#pragma clang module endbuild51 52#pragma clang module import A53#pragma clang module import B54 55// CHECK: define {{.*}}use_g56int use_g() {57 return g()();58}59 60static_assert(g2()() == 0);61