Author: Chuanqi Xu Date: 2022-12-14T11:30:12+08:00 New Revision: edb3b44e7d7ca34b7e7a880a15411678d057e039
URL: https://github.com/llvm/llvm-project/commit/edb3b44e7d7ca34b7e7a880a15411678d057e039 DIFF: https://github.com/llvm/llvm-project/commit/edb3b44e7d7ca34b7e7a880a15411678d057e039.diff LOG: [NFC] [C++20] [Modules] Add more lambda tests Add more lambda tests in modules. This is useful when we started to work on https://github.com/llvm/llvm-project/issues/57222. Added: clang/test/Modules/lambdas.cppm clang/test/Modules/template-lambdas.cppm Modified: Removed: ################################################################################ diff --git a/clang/test/Modules/lambdas.cppm b/clang/test/Modules/lambdas.cppm new file mode 100644 index 0000000000000..7f00cf6f8682a --- /dev/null +++ b/clang/test/Modules/lambdas.cppm @@ -0,0 +1,62 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/lambdas.cppm -emit-module-interface \ +// RUN: -o %t/lambdas.pcm +// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ +// RUN: -verify +// +// RUN: %clang_cc1 -std=c++20 %t/lambdas2.cppm -emit-module-interface \ +// RUN: -o %t/lambdas2.pcm +// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ +// RUN: -verify -DUSE_LAMBDA2 + +//--- lambdas.h +auto l1 = []() constexpr -> int { + return 43; +}; +// +auto l2 = []() constexpr -> double { + return 3.0; +}; +// +auto l3 = [](auto i) constexpr -> int { + return int(i); +}; +// +auto l4 = [](auto i, auto u) constexpr -> int { + return i + u; +}; + +//--- lambdas.cppm +module; +#include "lambdas.h" +export module lambdas; +export using ::l1; +export using ::l2; +export using ::l3; +export using ::l4; + +//--- lambdas2.cppm +export module lambdas2; +export { +#include "lambdas.h" +} + +//--- Use.cpp +// expected-no-diagnostics +#ifndef USE_LAMBDA2 +import lambdas; +#else +import lambdas2; +#endif + +static_assert(l1.operator()() == 43); + +static_assert(l2.operator()() == 3.0); + +static_assert(l3.operator()(8.4) == 8); + +static_assert(l4(4, 12) == 16); +static_assert(l4(5, 20) == 25); diff --git a/clang/test/Modules/template-lambdas.cppm b/clang/test/Modules/template-lambdas.cppm new file mode 100644 index 0000000000000..69117a1a04fc7 --- /dev/null +++ b/clang/test/Modules/template-lambdas.cppm @@ -0,0 +1,68 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/template_lambdas.cppm -emit-module-interface \ +// RUN: -o %t/lambdas.pcm +// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ +// RUN: -verify +// +// RUN: %clang_cc1 -std=c++20 %t/template_lambdas2.cppm -emit-module-interface \ +// RUN: -o %t/lambdas2.pcm +// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \ +// RUN: -verify -DUSE_LAMBDA2 + +//--- lambdas.h +auto l1 = []<int I>() constexpr -> int { + return I; +}; + +auto l2 = []<auto I>() constexpr -> decltype(I) { + return I; +}; + +auto l3 = []<class T>(auto i) constexpr -> T { + return T(i); +}; + +auto l4 = []<template<class> class T, class U>(T<U>, auto i) constexpr -> U { + return U(i); +}; + +//--- template_lambdas.cppm +module; +#include "lambdas.h" +export module lambdas; +export using ::l1; +export using ::l2; +export using ::l3; +export using ::l4; + +//--- template_lambdas2.cppm +export module lambdas2; +export { +#include "lambdas.h" +} + +//--- Use.cpp +// expected-no-diagnostics +#ifndef USE_LAMBDA2 +import lambdas; +#else +import lambdas2; +#endif + +static_assert(l1.operator()<5>() == 5); +static_assert(l1.operator()<6>() == 6); + +static_assert(l2.operator()<7>() == 7); +static_assert(l2.operator()<nullptr>() == nullptr); + +static_assert(l3.operator()<int>(8.4) == 8); +static_assert(l3.operator()<int>(9.9) == 9); + +template<typename T> +struct DummyTemplate { }; + +static_assert(l4(DummyTemplate<float>(), 12) == 12.0); +static_assert(l4(DummyTemplate<int>(), 19.8) == 19); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits