[llvm-branch-commits] [clang-tools-extra] release/19.x: [clang-tidy] Avoid capturing a local variable in a static lambda in UseRangesCheck (#111282) (PR #111318)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Oct 10 23:01:47 PDT 2024
https://github.com/tru updated https://github.com/llvm/llvm-project/pull/111318
>From 33a5c88572875d2470aa0ad459493264974cdc2e Mon Sep 17 00:00:00 2001
From: Nathan Ridge <zeratul976 at hotmail.com>
Date: Sun, 6 Oct 2024 18:13:36 -0400
Subject: [PATCH] [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)
---
.../clang-tidy/boost/UseRangesCheck.cpp | 18 +++++++++---------
.../clangd/unittests/ClangdLSPServerTests.cpp | 16 ++++++++++++++++
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/boost/UseRangesCheck.cpp b/clang-tools-extra/clang-tidy/boost/UseRangesCheck.cpp
index 4022ea0cdaf5ee..e45687fde6d9f6 100644
--- a/clang-tools-extra/clang-tidy/boost/UseRangesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/boost/UseRangesCheck.cpp
@@ -204,7 +204,7 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
ReplacerMap Results;
static const Signature SingleSig = {{0}};
static const Signature TwoSig = {{0}, {2}};
- static const auto AddFrom =
+ const auto AddFrom =
[&Results](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
std::initializer_list<StringRef> Names, StringRef Prefix) {
llvm::SmallString<64> Buffer;
@@ -214,17 +214,17 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
}
};
- static const auto AddFromStd =
- [](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
- std::initializer_list<StringRef> Names) {
+ const auto AddFromStd =
+ [&](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
+ std::initializer_list<StringRef> Names) {
AddFrom(Replacer, Names, "std");
};
- static const auto AddFromBoost =
- [](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
- std::initializer_list<
- std::pair<StringRef, std::initializer_list<StringRef>>>
- NamespaceAndNames) {
+ const auto AddFromBoost =
+ [&](llvm::IntrusiveRefCntPtr<UseRangesCheck::Replacer> Replacer,
+ std::initializer_list<
+ std::pair<StringRef, std::initializer_list<StringRef>>>
+ NamespaceAndNames) {
for (auto [Namespace, Names] : NamespaceAndNames)
AddFrom(Replacer, Names,
SmallString<64>{"boost", (Namespace.empty() ? "" : "::"),
diff --git a/clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp b/clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp
index 75a140767035b2..49a94045ea4878 100644
--- a/clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp
@@ -262,6 +262,22 @@ TEST_F(LSPTest, ClangTidyRename) {
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) {
Annotations Code(R"cpp(
void calle^e(int);
More information about the llvm-branch-commits
mailing list