diff options
| author | Artem Belevich <tra@google.com> | 2018-06-27 18:32:51 +0000 |
|---|---|---|
| committer | Artem Belevich <tra@google.com> | 2018-06-27 18:32:51 +0000 |
| commit | c66d254ded501057a593260639a2bf80058b544c (patch) | |
| tree | 552f311909b9b3b4c09f09d30081bfe9fc6e51ac /clang/lib/CodeGen/CodeGenModule.cpp | |
| parent | 520748f01ef5ea4d4bc27cdbf09898ad9bceb9a8 (diff) | |
| download | llvm-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.cpp | 5 |
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 = |
