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