Fix use-after-free when a C++ thread_local variable gets replaced (because its

type changes when the initializer is attached). Don't hold onto the
GlobalVariable*; recompute it from the VarDecl* instead.

llvm-svn: 254359
This commit is contained in:
Richard Smith
2015-12-01 01:10:48 +00:00
parent 21ed3b13bd
commit 5a99c49d2e
7 changed files with 34 additions and 32 deletions

View File

@@ -378,13 +378,12 @@ private:
StaticExternCMap StaticExternCValues;
/// \brief thread_local variables defined or used in this TU.
std::vector<std::pair<const VarDecl *, llvm::GlobalVariable *> >
CXXThreadLocals;
std::vector<const VarDecl *> CXXThreadLocals;
/// \brief thread_local variables with initializers that need to run
/// before any thread_local variable in this TU is odr-used.
std::vector<llvm::Function *> CXXThreadLocalInits;
std::vector<llvm::GlobalVariable *> CXXThreadLocalInitVars;
std::vector<const VarDecl *> CXXThreadLocalInitVars;
/// Global variables with initializers that need to run before main.
std::vector<llvm::Function *> CXXGlobalInits;