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/CGCXXABI.h | |
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/CGCXXABI.h')
-rw-r--r-- | clang/lib/CodeGen/CGCXXABI.h | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGCXXABI.h b/clang/lib/CodeGen/CGCXXABI.h index 7667361f7b9..3f240b1802b 100644 --- a/clang/lib/CodeGen/CGCXXABI.h +++ b/clang/lib/CodeGen/CGCXXABI.h @@ -538,11 +538,9 @@ public: /// thread_local variables, a list of functions to perform the /// initialization. virtual void EmitThreadLocalInitFuncs( - CodeGenModule &CGM, - ArrayRef<std::pair<const VarDecl *, llvm::GlobalVariable *>> - CXXThreadLocals, + CodeGenModule &CGM, ArrayRef<const VarDecl *> CXXThreadLocals, ArrayRef<llvm::Function *> CXXThreadLocalInits, - ArrayRef<llvm::GlobalVariable *> CXXThreadLocalInitVars) = 0; + ArrayRef<const VarDecl *> CXXThreadLocalInitVars) = 0; // Determine if references to thread_local global variables can be made // directly or require access through a thread wrapper function. |