Author: David Blaikie Date: 2022-11-18T00:24:40Z New Revision: a72d8d704178118b254d9ff84a78afb18813b888
URL: https://github.com/llvm/llvm-project/commit/a72d8d704178118b254d9ff84a78afb18813b888 DIFF: https://github.com/llvm/llvm-project/commit/a72d8d704178118b254d9ff84a78afb18813b888.diff LOG: Update lambda mangling test to C++17 add some side effects so some (I guess guaranteed?) constant folding doesn't happen, keeping the test testing the things it was testing.. The test passes with 14, 17, and 20 - so let's just leave the version off so it might be able to be updated/used in C++20 when the default changes to C++20 in the future. Added: Modified: clang/test/CodeGenCXX/mangle-lambdas.cpp Removed: ################################################################################ diff --git a/clang/test/CodeGenCXX/mangle-lambdas.cpp b/clang/test/CodeGenCXX/mangle-lambdas.cpp index 93362876e1742..c10f7add32933 100644 --- a/clang/test/CodeGenCXX/mangle-lambdas.cpp +++ b/clang/test/CodeGenCXX/mangle-lambdas.cpp @@ -1,9 +1,11 @@ -// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s -w | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s -w | FileCheck %s + +void side_effect(); // CHECK-LABEL: define linkonce_odr void @_Z11inline_funci inline void inline_func(int n) { // CHECK: call noundef i32 @_ZZ11inline_funciENKUlvE_clEv - int i = []{ return 1; }(); + int i = []{ return side_effect(), 1; }(); // CHECK: call noundef i32 @_ZZ11inline_funciENKUlvE0_clEv int j = [=] { return n + i; }(); @@ -14,7 +16,7 @@ inline void inline_func(int n) { // CHECK: call noundef i32 @_ZZ11inline_funciENKUliE_clEi int l = [=] (int x) -> int { return x + i; }(n); - int inner(int i = []{ return 17; }()); + int inner(int i = []{ return side_effect(), 17; }()); // CHECK: call noundef i32 @_ZZ11inline_funciENKUlvE2_clEv // CHECK-NEXT: call noundef i32 @_Z5inneri inner(); @@ -48,14 +50,14 @@ int *use_var_template = var_template<int>(); void use_var_template_substitution(decltype(var_template<int>), decltype(var_template<float>)) {} struct S { - void f(int = []{return 1;}() - + []{return 2;}(), - int = []{return 3;}()); + void f(int = []{return side_effect(), 1;}() + + []{return side_effect(), 2;}(), + int = []{return side_effect(), 3;}()); void g(int, int); }; -void S::g(int i = []{return 1;}(), - int j = []{return 2; }()) {} +void S::g(int i = []{return side_effect(), 1;}(), + int j = []{return side_effect(), 2; }()) {} // CHECK-LABEL: define{{.*}} void @_Z6test_S1S void test_S(S s) { @@ -128,16 +130,16 @@ struct StaticMembers { template<typename T> int accept_lambda(T); template<typename T> -T StaticMembers<T>::x = []{return 1;}() + []{return 2;}(); +T StaticMembers<T>::x = []{return side_effect(), 1;}() + []{return side_effect(), 2;}(); template<typename T> -T StaticMembers<T>::y = []{return 3;}(); +T StaticMembers<T>::y = []{return side_effect(), 3;}(); template<typename T> -T StaticMembers<T>::z = accept_lambda([]{return 4;}); +T StaticMembers<T>::z = accept_lambda([]{return side_effect(), 4;}); template<typename T> -int (*StaticMembers<T>::f)() = []{return 5;}; +int (*StaticMembers<T>::f)() = (side_effect(), []{return side_effect(), 5;}); // CHECK-LABEL: define internal void @__cxx_global_var_init // CHECK: call noundef i32 @_ZNK13StaticMembersIfE1xMUlvE_clEv @@ -169,7 +171,7 @@ template int (*StaticMembers<float>::f)(); // CHECK: call noundef i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK-LABEL: define internal noundef i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK: ret i32 42 -template<> double StaticMembers<double>::z = []{return 42; }(); +template<> double StaticMembers<double>::z = []{return side_effect(), 42; }(); template<typename T> void func_template(T = []{ return T(); }()); @@ -212,7 +214,7 @@ int k = testVarargsLambdaNumbering(); template<typename = int> -void ft1(int = [](int p = [] { return 42; } ()) { +void ft1(int = [](int p = [] { return side_effect(), 42; } ()) { return p; } ()); void test_ft1() { @@ -225,7 +227,7 @@ void test_ft1() { struct c1 { template<typename = int> - void mft1(int = [](int p = [] { return 42; } ()) { + void mft1(int = [](int p = [] { return side_effect(), 42; } ()) { return p; } ()); }; @@ -239,10 +241,10 @@ void test_c1_mft1() { template<typename = int> struct ct1 { - void mf1(int = [](int p = [] { return 42; } ()) { + void mf1(int = [](int p = [] { return side_effect(), 42; } ()) { return p; } ()); - friend void ff(ct1, int = [](int p = [] { return 0; }()) { return p; }()) {} + friend void ff(ct1, int = [](int p = [] { return side_effect(), 0; }()) { return p; }()) {} }; void test_ct1_mft1() { // CHECK: call noundef i32 @_ZZZN3ct1IiE3mf1EiEd_NKUliE_clEiEd_NKUlvE_clEv @@ -259,7 +261,7 @@ void test_ct1_mft1() { template<typename = int> void ft2() { - [](int p = [] { return 42; } ()) { return p; } (); + [](int p = [] { return side_effect(), 42; } ()) { return p; } (); } template void ft2<>(); // CHECK: call noundef i32 @_ZZZ3ft2IiEvvENKUliE_clEiEd_NKUlvE_clEv @@ -269,7 +271,7 @@ template void ft2<>(); template<typename> void ft3() { - void f(int = []{ return 0; }()); + void f(int = []{ return side_effect(), 0; }()); f(); } template void ft3<int>(); @@ -279,7 +281,7 @@ template void ft3<int>(); template<typename> void ft4() { struct lc { - void mf(int = []{ return 0; }()) {} + void mf(int = []{ return side_effect(), 0; }()) {} }; lc().mf(); } @@ -325,7 +327,7 @@ namespace PR12808 { template <typename L> constexpr B(L&& x) : a(x()) { } }; template <typename> void b(int) { - [&]{ (void)B<int>([&]{ return 1; }); }(); + [&]{ (void)B<int>([&]{ return side_effect(), 1; }); }(); } void f() { b<int>(1); @@ -336,8 +338,8 @@ namespace PR12808 { struct Members { - int x = [] { return 1; }() + [] { return 2; }(); - int y = [] { return 3; }(); + int x = [] { return side_effect(), 1; }() + [] { return side_effect(), 2; }(); + int y = [] { return side_effect(), 3; }(); }; void test_Members() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits