brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 6b61d35 Raw
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