nontrivial-threadlocal.h raw
1 // Copyright (c) 2023 Bitcoin Developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef NONTRIVIAL_THREADLOCAL_CHECK_H
6 #define NONTRIVIAL_THREADLOCAL_CHECK_H
7
8 #include <clang-tidy/ClangTidyCheck.h>
9
10 namespace bitcoin {
11
12 // Warn about any thread_local variable with a non-trivial destructor.
13 class NonTrivialThreadLocal final : public clang::tidy::ClangTidyCheck
14 {
15 public:
16 NonTrivialThreadLocal(clang::StringRef Name, clang::tidy::ClangTidyContext* Context)
17 : clang::tidy::ClangTidyCheck(Name, Context) {}
18
19 bool isLanguageVersionSupported(const clang::LangOptions& LangOpts) const override
20 {
21 return LangOpts.CPlusPlus;
22 }
23 void registerMatchers(clang::ast_matchers::MatchFinder* Finder) override;
24 void check(const clang::ast_matchers::MatchFinder::MatchResult& Result) override;
25 };
26
27 } // namespace bitcoin
28
29 #endif // NONTRIVIAL_THREADLOCAL_CHECK_H
30