diff options
-rw-r--r-- | llvm/include/llvm/IR/GlobalValue.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h index 116b54e0d0f..9478a4633f7 100644 --- a/llvm/include/llvm/IR/GlobalValue.h +++ b/llvm/include/llvm/IR/GlobalValue.h @@ -112,6 +112,12 @@ protected: private: friend class Constant; + void maybeSetDsoLocal() { + if (hasLocalLinkage() || + (!hasDefaultVisibility() && !hasExternalWeakLinkage())) + setDSOLocal(true); + } + // Give subclasses access to what otherwise would be wasted padding. // (17 + 4 + 2 + 2 + 2 + 3 + 1 + 1) == 32. unsigned SubClassData : GlobalValueSubClassDataBits; @@ -233,8 +239,7 @@ public: assert((!hasLocalLinkage() || V == DefaultVisibility) && "local linkage requires default visibility"); Visibility = V; - if (!hasExternalWeakLinkage() && V != DefaultVisibility) - setDSOLocal(true); + maybeSetDsoLocal(); } /// If the value is "Thread Local", its value isn't shared by the threads. @@ -437,11 +442,10 @@ public: } void setLinkage(LinkageTypes LT) { - if (isLocalLinkage(LT)) { + if (isLocalLinkage(LT)) Visibility = DefaultVisibility; - setDSOLocal(true); - } Linkage = LT; + maybeSetDsoLocal(); } LinkageTypes getLinkage() const { return LinkageTypes(Linkage); } |