Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2023 Bitcoin Developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#include "nontrivial-threadlocal.h"7#include <clang/AST/ASTContext.h>8#include <clang/ASTMatchers/ASTMatchFinder.h>11// Copied from clang-tidy's UnusedRaiiCheck12namespace {13AST_MATCHER(clang::CXXRecordDecl, hasNonTrivialDestructor) {14// TODO: If the dtor is there but empty we don't want to warn either.15return Node.hasDefinition() && Node.hasNonTrivialDestructor();16}17} // namespace19namespace bitcoin {21void NonTrivialThreadLocal::registerMatchers(clang::ast_matchers::MatchFinder* finder)22{23using namespace clang::ast_matchers;25/*26thread_local std::string foo;27*/29finder->addMatcher(30varDecl(31hasThreadStorageDuration(),32hasType(hasCanonicalType(recordType(hasDeclaration(cxxRecordDecl(hasNonTrivialDestructor())))))33).bind("nontrivial_threadlocal"),34this);35}37void NonTrivialThreadLocal::check(const clang::ast_matchers::MatchFinder::MatchResult& Result)38{39if (const clang::VarDecl* var = Result.Nodes.getNodeAs<clang::VarDecl>("nontrivial_threadlocal")) {40const auto user_diag = diag(var->getBeginLoc(), "Variable with non-trivial destructor cannot be thread_local.");41}42}44} // namespace bitcoin
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.