Skip to content

Commit 1ce5179

Browse files
HighCommander4llvmbot
authored andcommitted
[clang-tidy] Avoid capturing a local variable in a static lambda in UseRangesCheck (llvm#111282)
Fixes llvm#109367 (cherry picked from commit acf92a4)
1 parent d5498c3 commit 1ce5179

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

clang-tools-extra/clang-tidy/boost/UseRangesCheck.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
204204
ReplacerMap Results;
205205
static const Signature SingleSig = {{0}};
206206
static const Signature TwoSig = {{0}, {2}};
207-
static const auto AddFrom =
207+
const auto AddFrom =
208208
[&Results](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
209209
std::initializer_list<StringRef> Names, StringRef Prefix) {
210210
llvm::SmallString<64> Buffer;
@@ -214,17 +214,17 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
214214
}
215215
};
216216

217-
static const auto AddFromStd =
218-
[](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
219-
std::initializer_list<StringRef> Names) {
217+
const auto AddFromStd =
218+
[&](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
219+
std::initializer_list<StringRef> Names) {
220220
AddFrom(Replacer, Names, "std");
221221
};
222222

223-
static const auto AddFromBoost =
224-
[](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
225-
std::initializer_list<
226-
std::pair<StringRef, std::initializer_list<StringRef>>>
227-
NamespaceAndNames) {
223+
const auto AddFromBoost =
224+
[&](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
225+
std::initializer_list<
226+
std::pair<StringRef, std::initializer_list<StringRef>>>
227+
NamespaceAndNames) {
228228
for (auto [Namespace, Names] : NamespaceAndNames)
229229
AddFrom(Replacer, Names,
230230
SmallString<64>{"boost", (Namespace.empty() ? "" : "::"),

clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,22 @@ TEST_F(LSPTest, ClangTidyRename) {
262262
EXPECT_EQ(Params, std::vector{llvm::json::Value(std::move(ExpectedEdit))});
263263
}
264264

265+
TEST_F(LSPTest, ClangTidyCrash_Issue109367) {
266+
// This test requires clang-tidy checks to be linked in.
267+
if (!CLANGD_TIDY_CHECKS)
268+
return;
269+
Opts.ClangTidyProvider = [](tidy::ClangTidyOptions &ClangTidyOpts,
270+
llvm::StringRef) {
271+
ClangTidyOpts.Checks = {"-*,boost-use-ranges"};
272+
};
273+
// Check that registering the boost-use-ranges checker's matchers
274+
// on two different threads does not cause a crash.
275+
auto &Client = start();
276+
Client.didOpen("a.cpp", "");
277+
Client.didOpen("b.cpp", "");
278+
Client.sync();
279+
}
280+
265281
TEST_F(LSPTest, IncomingCalls) {
266282
Annotations Code(R"cpp(
267283
void calle^e(int);

0 commit comments

Comments
 (0)