/ contrib / devtools / bitcoin-tidy / nontrivial-threadlocal.h
nontrivial-threadlocal.h
 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