diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-05-07 23:00:22 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-05-07 23:00:22 +0000 |
commit | 04d60023af34b84dd98959f622e7cb46fe5593c4 (patch) | |
tree | 9b3b17f6ad0dd3b6abcf5a91cb90449a2a40d978 | |
parent | 76c17d324ca877420e4be98638ef15a62b2efa4e (diff) | |
download | llvm-04d60023af34b84dd98959f622e7cb46fe5593c4.tar.gz llvm-04d60023af34b84dd98959f622e7cb46fe5593c4.tar.bz2 llvm-04d60023af34b84dd98959f622e7cb46fe5593c4.tar.xz |
GlobalValue: Assert symbols with local linkage have default visibility
The change to ExtractGV.cpp has no functionality change except to avoid
the asserts. Existing testcases already cover this, so I didn't add a
new one.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208264 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/IR/GlobalValue.h | 12 | ||||
-rw-r--r-- | lib/Transforms/IPO/ExtractGV.cpp | 5 |
2 files changed, 12 insertions, 5 deletions
diff --git a/include/llvm/IR/GlobalValue.h b/include/llvm/IR/GlobalValue.h index 8434300111..51b9380ec1 100644 --- a/include/llvm/IR/GlobalValue.h +++ b/include/llvm/IR/GlobalValue.h @@ -93,7 +93,11 @@ public: bool hasProtectedVisibility() const { return Visibility == ProtectedVisibility; } - void setVisibility(VisibilityTypes V) { Visibility = V; } + void setVisibility(VisibilityTypes V) { + assert((!hasLocalLinkage() || V == DefaultVisibility) && + "local linkage requires default visibility"); + Visibility = V; + } DLLStorageClassTypes getDLLStorageClass() const { return DLLStorageClassTypes(DllStorageClass); @@ -195,7 +199,11 @@ public: bool hasExternalWeakLinkage() const { return isExternalWeakLinkage(Linkage); } bool hasCommonLinkage() const { return isCommonLinkage(Linkage); } - void setLinkage(LinkageTypes LT) { Linkage = LT; } + void setLinkage(LinkageTypes LT) { + assert((!isLocalLinkage(LT) || hasDefaultVisibility()) && + "local linkage requires default visibility"); + Linkage = LT; + } LinkageTypes getLinkage() const { return Linkage; } bool isDiscardableIfUnused() const { diff --git a/lib/Transforms/IPO/ExtractGV.cpp b/lib/Transforms/IPO/ExtractGV.cpp index 408713a2c2..40ec9fa8c1 100644 --- a/lib/Transforms/IPO/ExtractGV.cpp +++ b/lib/Transforms/IPO/ExtractGV.cpp @@ -27,11 +27,10 @@ using namespace llvm; /// the split module remain valid. static void makeVisible(GlobalValue &GV, bool Delete) { bool Local = GV.hasLocalLinkage(); - if (Local) - GV.setVisibility(GlobalValue::HiddenVisibility); - if (Local || Delete) { GV.setLinkage(GlobalValue::ExternalLinkage); + if (Local) + GV.setVisibility(GlobalValue::HiddenVisibility); return; } |