Skip to content

Commit 6cefb5f

Browse files
committed
add init capture test cases
on-behalf-of: @amd <[email protected]>
1 parent 3ff1c7a commit 6cefb5f

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

clang-tools-extra/test/clang-tidy/checkers/readability/avoid-default-lambda-capture.cpp

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %check_clang_tidy %s readability-avoid-default-lambda-capture %t -- -- -Wno-vla-extension
1+
// RUN: %check_clang_tidy %s readability-avoid-default-lambda-capture %t -- -- -Wno-vla-extension -std=c++20
22

33
void test_default_captures() {
44
int value = 42;
@@ -21,6 +21,34 @@ void test_default_captures() {
2121
// CHECK-FIXES: auto lambda4 = [&another, value](int x) { return value + another + x; };
2222
}
2323

24+
template<typename... Args>
25+
void test_pack_expansion_captures(Args... args) {
26+
int local = 5;
27+
28+
auto lambda1 = [=]() { return (args + ...); };
29+
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
30+
31+
auto lambda2 = [&]() { return (args + ...); };
32+
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
33+
34+
auto lambda3 = [=]() { return (args + ...) + local; };
35+
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
36+
37+
auto lambda4 = [&]() { return (args + ...) + local; };
38+
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
39+
40+
auto lambda5 = [=, ...copied = args]() { return (copied + ...); };
41+
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
42+
43+
auto lambda6 = [&, ...refs = args]() { return (refs + ...); };
44+
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
45+
}
46+
47+
void instantiate_pack_expansion_tests() {
48+
test_pack_expansion_captures(1, 2, 3);
49+
test_pack_expansion_captures(1.0, 2.0, 3.0);
50+
}
51+
2452
void test_acceptable_captures() {
2553
int value = 42;
2654
int another = 10;
@@ -52,7 +80,7 @@ void test_nested_lambdas() {
5280
auto inner = [&](int x) { return outer_var + middle_var + inner_var + x; };
5381
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
5482
// CHECK-FIXES: auto inner = [&outer_var, &middle_var, &inner_var](int x) { return outer_var + middle_var + inner_var + x; };
55-
83+
5684
return inner(10);
5785
};
5886
}
@@ -65,7 +93,7 @@ void test_lambda_returns() {
6593
// CHECK-FIXES: auto create_adder = [](int x) {
6694
return [x](int y) { return x + y; }; // Inner lambda is fine - explicit capture
6795
};
68-
96+
6997
auto func1 = [&]() { return a; };
7098
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
7199
// CHECK-FIXES: auto func1 = [&a]() { return a; };
@@ -77,19 +105,19 @@ void test_lambda_returns() {
77105

78106
class TestClass {
79107
int member = 42;
80-
108+
81109
public:
82110
void test_member_function_lambdas() {
83111
int local = 10;
84-
112+
85113
auto lambda1 = [=]() { return member + local; };
86114
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
87115
// CHECK-FIXES: auto lambda1 = [this, local]() { return member + local; };
88116

89117
auto lambda2 = [&]() { return member + local; };
90118
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
91119
// CHECK-FIXES: auto lambda2 = [this, &local]() { return member + local; };
92-
120+
93121
auto lambda3 = [this, local]() { return member + local; };
94122
auto lambda4 = [this, &local]() { return member + local; };
95123
}
@@ -99,7 +127,7 @@ class TestClass {
99127
template<typename T>
100128
void test_template_lambdas() {
101129
T value{};
102-
130+
103131
auto lambda = [=](T x) { return value + x; };
104132
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: lambda default captures are discouraged; prefer to capture specific variables explicitly [readability-avoid-default-lambda-capture]
105133
}

0 commit comments

Comments
 (0)