Skip to content
Snippets Groups Projects
Commit 33a5c885 authored by Nathan Ridge's avatar Nathan Ridge Committed by Tobias Hieta
Browse files

[clang-tidy] Avoid capturing a local variable in a static lambda in UseRangesCheck (#111282)

Fixes https://github.com/llvm/llvm-project/issues/109367

(cherry picked from commit acf92a47c0ece8562fd745215c478fe2d4ab5896)
parent 1515e638
Branches
No related tags found
No related merge requests found
...@@ -204,7 +204,7 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const { ...@@ -204,7 +204,7 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
ReplacerMap Results; ReplacerMap Results;
static const Signature SingleSig = {{0}}; static const Signature SingleSig = {{0}};
static const Signature TwoSig = {{0}, {2}}; static const Signature TwoSig = {{0}, {2}};
static const auto AddFrom = const auto AddFrom =
[&Results](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer, [&Results](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
std::initializer_list<StringRef> Names, StringRef Prefix) { std::initializer_list<StringRef> Names, StringRef Prefix) {
llvm::SmallString<64> Buffer; llvm::SmallString<64> Buffer;
...@@ -214,17 +214,17 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const { ...@@ -214,17 +214,17 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
} }
}; };
static const auto AddFromStd = const auto AddFromStd =
[](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer, [&](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
std::initializer_list<StringRef> Names) { std::initializer_list<StringRef> Names) {
AddFrom(Replacer, Names, "std"); AddFrom(Replacer, Names, "std");
}; };
static const auto AddFromBoost = const auto AddFromBoost =
[](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer, [&](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
std::initializer_list< std::initializer_list<
std::pair<StringRef, std::initializer_list<StringRef>>> std::pair<StringRef, std::initializer_list<StringRef>>>
NamespaceAndNames) { NamespaceAndNames) {
for (auto [Namespace, Names] : NamespaceAndNames) for (auto [Namespace, Names] : NamespaceAndNames)
AddFrom(Replacer, Names, AddFrom(Replacer, Names,
SmallString<64>{"boost", (Namespace.empty() ? "" : "::"), SmallString<64>{"boost", (Namespace.empty() ? "" : "::"),
......
...@@ -262,6 +262,22 @@ TEST_F(LSPTest, ClangTidyRename) { ...@@ -262,6 +262,22 @@ TEST_F(LSPTest, ClangTidyRename) {
EXPECT_EQ(Params, std::vector{llvm::json::Value(std::move(ExpectedEdit))}); EXPECT_EQ(Params, std::vector{llvm::json::Value(std::move(ExpectedEdit))});
} }
TEST_F(LSPTest, ClangTidyCrash_Issue109367) {
// This test requires clang-tidy checks to be linked in.
if (!CLANGD_TIDY_CHECKS)
return;
Opts.ClangTidyProvider = [](tidy::ClangTidyOptions &ClangTidyOpts,
llvm::StringRef) {
ClangTidyOpts.Checks = {"-*,boost-use-ranges"};
};
// Check that registering the boost-use-ranges checker's matchers
// on two different threads does not cause a crash.
auto &Client = start();
Client.didOpen("a.cpp", "");
Client.didOpen("b.cpp", "");
Client.sync();
}
TEST_F(LSPTest, IncomingCalls) { TEST_F(LSPTest, IncomingCalls) {
Annotations Code(R"cpp( Annotations Code(R"cpp(
void calle^e(int); void calle^e(int);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment