//===-- ManagedStatic.cpp - Static Global wrapper -------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the ManagedStatic class and llvm_shutdown(). // //===----------------------------------------------------------------------===// #include "llvm/Support/ManagedStatic.h" #include "llvm/Config/config.h" #include "llvm/Support/Threading.h" #include <cassert> #include <mutex> usingnamespacellvm; static const ManagedStaticBase *StaticList = …; static std::recursive_mutex *getManagedStaticMutex() { … } void ManagedStaticBase::RegisterManagedStatic(void *(*Creator)(), void (*Deleter)(void*)) const { … } void ManagedStaticBase::destroy() const { … } /// llvm_shutdown - Deallocate and destroy all ManagedStatic variables. /// IMPORTANT: it's only safe to call llvm_shutdown() in single thread, /// without any other threads executing LLVM APIs. /// llvm_shutdown() should be the last use of LLVM APIs. void llvm::llvm_shutdown() { … }