summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp9
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,
OpenPOWER on IntegriCloud