1
- // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s -w | FileCheck %s
1
+ // RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s -w | FileCheck %s
2
+
3
+ void side_effect ();
2
4
3
5
// CHECK-LABEL: define linkonce_odr void @_Z11inline_funci
4
6
inline void inline_func (int n) {
5
7
// CHECK: call noundef i32 @_ZZ11inline_funciENKUlvE_clEv
6
- int i = []{ return 1 ; }();
8
+ int i = []{ return side_effect (), 1 ; }();
7
9
8
10
// CHECK: call noundef i32 @_ZZ11inline_funciENKUlvE0_clEv
9
11
int j = [=] { return n + i; }();
@@ -14,7 +16,7 @@ inline void inline_func(int n) {
14
16
// CHECK: call noundef i32 @_ZZ11inline_funciENKUliE_clEi
15
17
int l = [=] (int x) -> int { return x + i; }(n);
16
18
17
- int inner (int i = []{ return 17 ; }());
19
+ int inner (int i = []{ return side_effect (), 17 ; }());
18
20
// CHECK: call noundef i32 @_ZZ11inline_funciENKUlvE2_clEv
19
21
// CHECK-NEXT: call noundef i32 @_Z5inneri
20
22
inner ();
@@ -48,14 +50,14 @@ int *use_var_template = var_template<int>();
48
50
void use_var_template_substitution (decltype (var_template<int >), decltype(var_template<float >)) {}
49
51
50
52
struct S {
51
- void f (int = []{return 1 ;}()
52
- + []{return 2 ;}(),
53
- int = []{return 3 ;}());
53
+ void f (int = []{return side_effect (), 1 ;}()
54
+ + []{return side_effect (), 2 ;}(),
55
+ int = []{return side_effect (), 3 ;}());
54
56
void g (int , int );
55
57
};
56
58
57
- void S::g (int i = []{return 1 ;}(),
58
- int j = []{return 2 ; }()) {}
59
+ void S::g (int i = []{return side_effect (), 1 ;}(),
60
+ int j = []{return side_effect (), 2 ; }()) {}
59
61
60
62
// CHECK-LABEL: define{{.*}} void @_Z6test_S1S
61
63
void test_S (S s) {
@@ -128,16 +130,16 @@ struct StaticMembers {
128
130
template <typename T> int accept_lambda (T);
129
131
130
132
template <typename T>
131
- T StaticMembers<T>::x = []{return 1 ;}() + []{return 2 ;}();
133
+ T StaticMembers<T>::x = []{return side_effect (), 1 ;}() + []{return side_effect (), 2 ;}();
132
134
133
135
template <typename T>
134
- T StaticMembers<T>::y = []{return 3 ;}();
136
+ T StaticMembers<T>::y = []{return side_effect (), 3 ;}();
135
137
136
138
template <typename T>
137
- T StaticMembers<T>::z = accept_lambda([]{return 4 ;});
139
+ T StaticMembers<T>::z = accept_lambda([]{return side_effect (), 4 ;});
138
140
139
141
template <typename T>
140
- int (*StaticMembers<T>::f)() = []{return 5 ;};
142
+ int (*StaticMembers<T>::f)() = (side_effect(), []{return side_effect (), 5 ;}) ;
141
143
142
144
// CHECK-LABEL: define internal void @__cxx_global_var_init
143
145
// CHECK: call noundef i32 @_ZNK13StaticMembersIfE1xMUlvE_clEv
@@ -169,7 +171,7 @@ template int (*StaticMembers<float>::f)();
169
171
// CHECK: call noundef i32 @"_ZNK13StaticMembersIdE3$_2clEv"
170
172
// CHECK-LABEL: define internal noundef i32 @"_ZNK13StaticMembersIdE3$_2clEv"
171
173
// CHECK: ret i32 42
172
- template <> double StaticMembers<double >::z = []{return 42 ; }();
174
+ template <> double StaticMembers<double >::z = []{return side_effect (), 42 ; }();
173
175
174
176
template <typename T>
175
177
void func_template (T = []{ return T (); }());
@@ -212,7 +214,7 @@ int k = testVarargsLambdaNumbering();
212
214
213
215
214
216
template <typename = int >
215
- void ft1 (int = [](int p = [] { return 42 ; } ()) {
217
+ void ft1 (int = [](int p = [] { return side_effect (), 42 ; } ()) {
216
218
return p;
217
219
} ());
218
220
void test_ft1 () {
@@ -225,7 +227,7 @@ void test_ft1() {
225
227
226
228
struct c1 {
227
229
template <typename = int >
228
- void mft1 (int = [](int p = [] { return 42 ; } ()) {
230
+ void mft1 (int = [](int p = [] { return side_effect (), 42 ; } ()) {
229
231
return p;
230
232
} ());
231
233
};
@@ -239,10 +241,10 @@ void test_c1_mft1() {
239
241
240
242
template <typename = int >
241
243
struct ct1 {
242
- void mf1 (int = [](int p = [] { return 42 ; } ()) {
244
+ void mf1 (int = [](int p = [] { return side_effect (), 42 ; } ()) {
243
245
return p;
244
246
} ());
245
- friend void ff (ct1, int = [](int p = [] { return 0 ; }()) { return p; }()) {}
247
+ friend void ff (ct1, int = [](int p = [] { return side_effect (), 0 ; }()) { return p; }()) {}
246
248
};
247
249
void test_ct1_mft1 () {
248
250
// CHECK: call noundef i32 @_ZZZN3ct1IiE3mf1EiEd_NKUliE_clEiEd_NKUlvE_clEv
@@ -259,7 +261,7 @@ void test_ct1_mft1() {
259
261
260
262
template <typename = int >
261
263
void ft2 () {
262
- [](int p = [] { return 42 ; } ()) { return p; } ();
264
+ [](int p = [] { return side_effect (), 42 ; } ()) { return p; } ();
263
265
}
264
266
template void ft2<>();
265
267
// CHECK: call noundef i32 @_ZZZ3ft2IiEvvENKUliE_clEiEd_NKUlvE_clEv
@@ -269,7 +271,7 @@ template void ft2<>();
269
271
270
272
template <typename >
271
273
void ft3 () {
272
- void f (int = []{ return 0 ; }());
274
+ void f (int = []{ return side_effect (), 0 ; }());
273
275
f ();
274
276
}
275
277
template void ft3<int >();
@@ -279,7 +281,7 @@ template void ft3<int>();
279
281
template <typename >
280
282
void ft4 () {
281
283
struct lc {
282
- void mf (int = []{ return 0 ; }()) {}
284
+ void mf (int = []{ return side_effect (), 0 ; }()) {}
283
285
};
284
286
lc ().mf ();
285
287
}
@@ -325,7 +327,7 @@ namespace PR12808 {
325
327
template <typename L> constexpr B (L&& x) : a(x()) { }
326
328
};
327
329
template <typename > void b (int ) {
328
- [&]{ (void )B<int >([&]{ return 1 ; }); }();
330
+ [&]{ (void )B<int >([&]{ return side_effect (), 1 ; }); }();
329
331
}
330
332
void f () {
331
333
b<int >(1 );
@@ -336,8 +338,8 @@ namespace PR12808 {
336
338
337
339
338
340
struct Members {
339
- int x = [] { return 1 ; }() + [] { return 2 ; }();
340
- int y = [] { return 3 ; }();
341
+ int x = [] { return side_effect (), 1 ; }() + [] { return side_effect (), 2 ; }();
342
+ int y = [] { return side_effect (), 3 ; }();
341
343
};
342
344
343
345
void test_Members () {
0 commit comments