diff --git a/clang/test/CodeGenCXX/mangle-lambdas.cpp b/clang/test/CodeGenCXX/mangle-lambdas.cpp index 93362876e174..c10f7add3293 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(); void use_var_template_substitution(decltype(var_template), decltype(var_template)) {} 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 int accept_lambda(T); template -T StaticMembers::x = []{return 1;}() + []{return 2;}(); +T StaticMembers::x = []{return side_effect(), 1;}() + []{return side_effect(), 2;}(); template -T StaticMembers::y = []{return 3;}(); +T StaticMembers::y = []{return side_effect(), 3;}(); template -T StaticMembers::z = accept_lambda([]{return 4;}); +T StaticMembers::z = accept_lambda([]{return side_effect(), 4;}); template -int (*StaticMembers::f)() = []{return 5;}; +int (*StaticMembers::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::f)(); // CHECK: call noundef i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK-LABEL: define internal noundef i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK: ret i32 42 -template<> double StaticMembers::z = []{return 42; }(); +template<> double StaticMembers::z = []{return side_effect(), 42; }(); template void func_template(T = []{ return T(); }()); @@ -212,7 +214,7 @@ int k = testVarargsLambdaNumbering(); template -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 - 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 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 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 void ft3() { - void f(int = []{ return 0; }()); + void f(int = []{ return side_effect(), 0; }()); f(); } template void ft3(); @@ -279,7 +281,7 @@ template void ft3(); template 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 constexpr B(L&& x) : a(x()) { } }; template void b(int) { - [&]{ (void)B([&]{ return 1; }); }(); + [&]{ (void)B([&]{ return side_effect(), 1; }); }(); } void f() { b(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() {