1 // RUN: cp %s %t
2 // RUN: %clang_cc1 -x c++ -fsyntax-only -Wunused-lambda-capture -Wno-unused-value -std=c++1z -fixit %t
3 // RUN: grep -v CHECK %t | FileCheck %s
4
test()5 void test() {
6 int i = 0;
7 int j = 0;
8 int k = 0;
9 int c = 10;
10 int a[c];
11
12 [i,j] { return i; };
13 // CHECK: [i] { return i; };
14 [i,j] { return j; };
15 // CHECK: [j] { return j; };
16 [&i,j] { return j; };
17 // CHECK: [j] { return j; };
18 [j,&i] { return j; };
19 // CHECK: [j] { return j; };
20 [i,j,k] {};
21 // CHECK: [] {};
22 [i,j,k] { return i + j; };
23 // CHECK: [i,j] { return i + j; };
24 [i,j,k] { return j + k; };
25 // CHECK: [j,k] { return j + k; };
26 [i,j,k] { return i + k; };
27 // CHECK: [i,k] { return i + k; };
28 [i,j,k] { return i + j + k; };
29 // CHECK: [i,j,k] { return i + j + k; };
30 [&,i] { return k; };
31 // CHECK: [&] { return k; };
32 [=,&i] { return k; };
33 // CHECK: [=] { return k; };
34 [=,&i,&j] { return j; };
35 // CHECK: [=,&j] { return j; };
36 [=,&i,&j] { return i; };
37 // CHECK: [=,&i] { return i; };
38 [z = i] {};
39 // CHECK: [] {};
40 [i,z = i] { return z; };
41 // CHECK: [z = i] { return z; };
42 [z = i,i] { return z; };
43 // CHECK: [z = i] { return z; };
44 [&a] {};
45 // CHECK: [] {};
46 [i,&a] { return i; };
47 // CHECK: [i] { return i; };
48 [&a,i] { return i; };
49 // CHECK: [i] { return i; };
50
51 #define I_MACRO() i
52 #define I_REF_MACRO() &i
53 [I_MACRO()] {};
54 // CHECK: [] {};
55 [I_MACRO(),j] { return j; };
56 // CHECK: [j] { return j; };
57 [j,I_MACRO()] { return j; };
58 // CHECK: [j] { return j; };
59 [I_REF_MACRO(),j] { return j; };
60 // CHECK: [j] { return j; };
61 [j,I_REF_MACRO()] { return j; };
62 // CHECK: [j] { return j; };
63
64 int n = 0;
65 [z = (n = i),j] {};
66 // CHECK: [z = (n = i)] {};
67 [j,z = (n = i)] {};
68 // CHECK: [z = (n = i)] {};
69 }
70
71 class ThisTest {
test()72 void test() {
73 int i = 0;
74
75 [this] {};
76 // CHECK: [] {};
77 [i,this] { return i; };
78 // CHECK: [i] { return i; };
79 [this,i] { return i; };
80 // CHECK: [i] { return i; };
81 [*this] {};
82 // CHECK: [] {};
83 [*this,i] { return i; };
84 // CHECK: [i] { return i; };
85 [i,*this] { return i; };
86 // CHECK: [i] { return i; };
87 [*this] { return this; };
88 // CHECK: [*this] { return this; };
89 [*this,i] { return this; };
90 // CHECK: [*this] { return this; };
91 [i,*this] { return this; };
92 // CHECK: [*this] { return this; };
93 }
94 };
95