diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-12-01 01:10:48 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-12-01 01:10:48 +0000 |
commit | 5a99c49d2e232c3a5076b2f99549ccd595598a4c (patch) | |
tree | 7961878cd4a73b96ba7506a7f9cafd199dce4b84 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 21ed3b13bd1a9c9d3cca49553cdd7274c4de5993 (diff) | |
download | bcm5719-llvm-5a99c49d2e232c3a5076b2f99549ccd595598a4c.tar.gz bcm5719-llvm-5a99c49d2e232c3a5076b2f99549ccd595598a4c.zip |
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
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 042984a43d3..a15c43c313a 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1986,7 +1986,7 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName, if (D->getTLSKind()) { if (D->getTLSKind() == VarDecl::TLS_Dynamic) - CXXThreadLocals.push_back(std::make_pair(D, GV)); + CXXThreadLocals.push_back(D); setTLSMode(GV, *D); } @@ -2379,7 +2379,7 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D, if (D->getTLSKind() && !GV->isThreadLocal()) { if (D->getTLSKind() == VarDecl::TLS_Dynamic) - CXXThreadLocals.push_back(std::make_pair(D, GV)); + CXXThreadLocals.push_back(D); setTLSMode(GV, *D); } |