diff --git a/lib/IR/PassRegistry.cpp b/lib/IR/PassRegistry.cpp index 6a5bee2f57b..e85fabffb8c 100644 --- a/lib/IR/PassRegistry.cpp +++ b/lib/IR/PassRegistry.cpp @@ -73,7 +73,10 @@ void *PassRegistry::getImpl() const { // PassRegistry::~PassRegistry() { - sys::SmartScopedWriter Guard(*Lock); + // Don't acquire the mutex here. This is destroyed during static execution of + // static destructors, after llvm_shutdown() has been called, so all instances + // of all ManagedStatics (including the Mutex), will have been destroyed as + // well. PassRegistryImpl *Impl = static_cast(pImpl); delete Impl; pImpl = nullptr;