[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)
This commit is contained in:
committed by
Tobias Hieta
parent
1515e63864
commit
33a5c88572
@@ -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 {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
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) {
|
|||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user