diff options
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 389f586443c..de3810554f9 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -716,6 +716,12 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, static bool shouldAssumeDSOLocal(const CodeGenModule &CGM, llvm::GlobalValue *GV) { + if (GV->hasLocalLinkage()) + return true; + + if (!GV->hasDefaultVisibility() && !GV->hasExternalWeakLinkage()) + return true; + // DLLImport explicitly marks the GV as external. if (GV->hasDLLImportStorageClass()) return false; @@ -773,8 +779,7 @@ static bool shouldAssumeDSOLocal(const CodeGenModule &CGM, } void CodeGenModule::setDSOLocal(llvm::GlobalValue *GV) const { - if (shouldAssumeDSOLocal(*this, GV)) - GV->setDSOLocal(true); + GV->setDSOLocal(shouldAssumeDSOLocal(*this, GV)); } void CodeGenModule::setDLLImportDLLExport(llvm::GlobalValue *GV, |