aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorArtem Belevich <tra@google.com>2018-06-27 18:32:51 +0000
committerArtem Belevich <tra@google.com>2018-06-27 18:32:51 +0000
commitc66d254ded501057a593260639a2bf80058b544c (patch)
tree552f311909b9b3b4c09f09d30081bfe9fc6e51ac /clang/lib/CodeGen/CodeGenModule.cpp
parent520748f01ef5ea4d4bc27cdbf09898ad9bceb9a8 (diff)
downloadllvm-c66d254ded501057a593260639a2bf80058b544c.zip
llvm-c66d254ded501057a593260639a2bf80058b544c.tar.gz
llvm-c66d254ded501057a593260639a2bf80058b544c.tar.bz2
[CUDA] Use atexit() to call module destructor.
This matches the way NVCC does it. Doing module cleanup at global destructor phase used to work, but is, apparently, too late for the CUDA runtime in CUDA-9.2, which ends up crashing with double-free. Differential Revision: https://reviews.llvm.org/D48613 llvm-svn: 335763
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 7752dbc..13afd4b 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -404,10 +404,9 @@ void CodeGenModule::Release() {
AddGlobalCtor(ObjCInitFunction);
if (Context.getLangOpts().CUDA && !Context.getLangOpts().CUDAIsDevice &&
CUDARuntime) {
- if (llvm::Function *CudaCtorFunction = CUDARuntime->makeModuleCtorFunction())
+ if (llvm::Function *CudaCtorFunction =
+ CUDARuntime->makeModuleCtorFunction())
AddGlobalCtor(CudaCtorFunction);
- if (llvm::Function *CudaDtorFunction = CUDARuntime->makeModuleDtorFunction())
- AddGlobalDtor(CudaDtorFunction);
}
if (OpenMPRuntime) {
if (llvm::Function *OpenMPRegistrationFunction =