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