xref: /llvm-project/clang/test/Modules/lambdas.cppm (revision da00c60dae0040185dc45039c4397f6e746548e9)
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