1edb3b44eSChuanqi Xu// RUN: rm -rf %t 2edb3b44eSChuanqi Xu// RUN: mkdir -p %t 3edb3b44eSChuanqi Xu// RUN: split-file %s %t 4edb3b44eSChuanqi Xu// 5edb3b44eSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/lambdas.cppm -emit-module-interface \ 6edb3b44eSChuanqi Xu// RUN: -o %t/lambdas.pcm 7edb3b44eSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ 8edb3b44eSChuanqi Xu// RUN: -verify 9edb3b44eSChuanqi Xu// 10edb3b44eSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/lambdas2.cppm -emit-module-interface \ 11edb3b44eSChuanqi Xu// RUN: -o %t/lambdas2.pcm 12edb3b44eSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ 13edb3b44eSChuanqi Xu// RUN: -verify -DUSE_LAMBDA2 14*da00c60dSChuanqi Xu// 15*da00c60dSChuanqi Xu// Test again with reduced BMI. 16*da00c60dSChuanqi Xu// RUN: rm -rf %t 17*da00c60dSChuanqi Xu// RUN: mkdir -p %t 18*da00c60dSChuanqi Xu// RUN: split-file %s %t 19*da00c60dSChuanqi Xu// 20*da00c60dSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/lambdas.cppm -emit-reduced-module-interface \ 21*da00c60dSChuanqi Xu// RUN: -o %t/lambdas.pcm 22*da00c60dSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ 23*da00c60dSChuanqi Xu// RUN: -verify 24*da00c60dSChuanqi Xu// 25*da00c60dSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/lambdas2.cppm -emit-reduced-module-interface \ 26*da00c60dSChuanqi Xu// RUN: -o %t/lambdas2.pcm 27*da00c60dSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ 28*da00c60dSChuanqi Xu// RUN: -verify -DUSE_LAMBDA2 29edb3b44eSChuanqi Xu 30edb3b44eSChuanqi Xu//--- lambdas.h 31edb3b44eSChuanqi Xuauto l1 = []() constexpr -> int { 32edb3b44eSChuanqi Xu return 43; 33edb3b44eSChuanqi Xu}; 34edb3b44eSChuanqi Xu// 35edb3b44eSChuanqi Xuauto l2 = []() constexpr -> double { 36edb3b44eSChuanqi Xu return 3.0; 37edb3b44eSChuanqi Xu}; 38edb3b44eSChuanqi Xu// 39edb3b44eSChuanqi Xuauto l3 = [](auto i) constexpr -> int { 40edb3b44eSChuanqi Xu return int(i); 41edb3b44eSChuanqi Xu}; 42edb3b44eSChuanqi Xu// 43edb3b44eSChuanqi Xuauto l4 = [](auto i, auto u) constexpr -> int { 44edb3b44eSChuanqi Xu return i + u; 45edb3b44eSChuanqi Xu}; 46edb3b44eSChuanqi Xu 47edb3b44eSChuanqi Xu//--- lambdas.cppm 48edb3b44eSChuanqi Xumodule; 49edb3b44eSChuanqi Xu#include "lambdas.h" 50edb3b44eSChuanqi Xuexport module lambdas; 51edb3b44eSChuanqi Xuexport using ::l1; 52edb3b44eSChuanqi Xuexport using ::l2; 53edb3b44eSChuanqi Xuexport using ::l3; 54edb3b44eSChuanqi Xuexport using ::l4; 55edb3b44eSChuanqi Xu 56edb3b44eSChuanqi Xu//--- lambdas2.cppm 57edb3b44eSChuanqi Xuexport module lambdas2; 58edb3b44eSChuanqi Xuexport { 59edb3b44eSChuanqi Xu#include "lambdas.h" 60edb3b44eSChuanqi Xu} 61edb3b44eSChuanqi Xu 62edb3b44eSChuanqi Xu//--- Use.cpp 63edb3b44eSChuanqi Xu// expected-no-diagnostics 64edb3b44eSChuanqi Xu#ifndef USE_LAMBDA2 65edb3b44eSChuanqi Xuimport lambdas; 66edb3b44eSChuanqi Xu#else 67edb3b44eSChuanqi Xuimport lambdas2; 68edb3b44eSChuanqi Xu#endif 69edb3b44eSChuanqi Xu 70edb3b44eSChuanqi Xustatic_assert(l1.operator()() == 43); 71edb3b44eSChuanqi Xu 72edb3b44eSChuanqi Xustatic_assert(l2.operator()() == 3.0); 73edb3b44eSChuanqi Xu 74edb3b44eSChuanqi Xustatic_assert(l3.operator()(8.4) == 8); 75edb3b44eSChuanqi Xu 76edb3b44eSChuanqi Xustatic_assert(l4(4, 12) == 16); 77edb3b44eSChuanqi Xustatic_assert(l4(5, 20) == 25); 78