Clang Project

clang_source_code/test/FixIt/fixit-unused-lambda-capture.cpp
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
5void 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
71class ThisTest {
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