Author: Baranov Victor Date: 2025-03-28T21:33:58+08:00 New Revision: d6dcd985c03bec4b77872be00a81d92454fedc32
URL: https://github.com/llvm/llvm-project/commit/d6dcd985c03bec4b77872be00a81d92454fedc32 DIFF: https://github.com/llvm/llvm-project/commit/d6dcd985c03bec4b77872be00a81d92454fedc32.diff LOG: [clang-tidy] Fix `thread_local` false positives in `misc-use-internal-linkage` check (#132573) Based on C++ standard (see issue https://github.com/llvm/llvm-project/issues/131679) and [StackOverflow](https://stackoverflow.com/questions/22794382/are-c11-thread-local-variables-automatically-static) `thread_local` variables are implicitly `static` so we should not suggest adding `static` on a `thread_local` variables. I'd appreciate if someone else will confirm this too because reading standard is tricky. However, many people still use `static` and `thread_local` together: [github code-search](https://github.com/search?type=code&q=%22static+thread_local%22+language%3AC%2B%2B). Maybe disabling warnings on `thread_local` should be made as a flag? WDYT? Closes https://github.com/llvm/llvm-project/issues/131679. Added: Modified: clang-tools-extra/clang-tidy/misc/UseInternalLinkageCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/misc/use-internal-linkage-var.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/misc/UseInternalLinkageCheck.cpp b/clang-tools-extra/clang-tidy/misc/UseInternalLinkageCheck.cpp index a1a20c0782230..e2071b806b125 100644 --- a/clang-tools-extra/clang-tidy/misc/UseInternalLinkageCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/UseInternalLinkageCheck.cpp @@ -130,7 +130,10 @@ void UseInternalLinkageCheck::registerMatchers(MatchFinder *Finder) { isMain()))) .bind("fn"), this); - Finder->addMatcher(varDecl(Common, hasGlobalStorage()).bind("var"), this); + Finder->addMatcher( + varDecl(Common, hasGlobalStorage(), unless(hasThreadStorageDuration())) + .bind("var"), + this); } static constexpr StringRef Message = diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 7bbf2190ee262..6cb8d572d3a78 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -159,7 +159,9 @@ Changes in existing checks - Improved :doc:`misc-use-internal-linkage <clang-tidy/checks/misc/use-internal-linkage>` check by fix false positives - for function or variable in header file which contains macro expansion. + for function or variable in header file which contains macro expansion and + excluding variables with ``thread_local`` storage class specifier from being + matched. - Improved :doc:`modernize-use-default-member-init <clang-tidy/checks/modernize/use-default-member-init>` check by matching diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/use-internal-linkage-var.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/use-internal-linkage-var.cpp index 901272e40b8f2..3da05c71dd94f 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc/use-internal-linkage-var.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc/use-internal-linkage-var.cpp @@ -31,6 +31,8 @@ extern int global_extern; static int global_static; +thread_local int global_thread_local; + namespace { static int global_anonymous_ns; namespace NS { @@ -41,6 +43,7 @@ static int global_anonymous_ns; static void f(int para) { int local; static int local_static; + thread_local int local_thread_local; } struct S { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits