diff options
-rw-r--r-- | llvm/include/llvm/IR/GlobalValue.h | 6 | ||||
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 3 |
3 files changed, 10 insertions, 4 deletions
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h index 8fc34eced0e..4a148db9c9e 100644 --- a/llvm/include/llvm/IR/GlobalValue.h +++ b/llvm/include/llvm/IR/GlobalValue.h @@ -258,6 +258,9 @@ public: static bool isCommonLinkage(LinkageTypes Linkage) { return Linkage == CommonLinkage; } + static bool isValidDeclarationLinkage(LinkageTypes Linkage) { + return isExternalWeakLinkage(Linkage) || isExternalLinkage(Linkage); + } /// Whether the definition of this global may be replaced by something /// non-equivalent at link time. For example, if a function has weak linkage @@ -366,6 +369,9 @@ public: return isExternalWeakLinkage(getLinkage()); } bool hasCommonLinkage() const { return isCommonLinkage(getLinkage()); } + bool hasValidDeclarationLinkage() const { + return isValidDeclarationLinkage(getLinkage()); + } void setLinkage(LinkageTypes LT) { if (isLocalLinkage(LT)) diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 4994288c564..ea04eb70ede 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -825,8 +825,9 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc, // If the linkage is specified and is external, then no initializer is // present. Constant *Init = nullptr; - if (!HasLinkage || (Linkage != GlobalValue::ExternalWeakLinkage && - Linkage != GlobalValue::ExternalLinkage)) { + if (!HasLinkage || + !GlobalValue::isValidDeclarationLinkage( + (GlobalValue::LinkageTypes)Linkage)) { if (ParseGlobalValue(Ty, Init)) return true; } diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 03d2f8a351d..5621962497a 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -503,8 +503,7 @@ static void forEachUser(const Value *User, } void Verifier::visitGlobalValue(const GlobalValue &GV) { - Assert(!GV.isDeclaration() || GV.hasExternalLinkage() || - GV.hasExternalWeakLinkage(), + Assert(!GV.isDeclaration() || GV.hasValidDeclarationLinkage(), "Global is external, but doesn't have external or weak linkage!", &GV); Assert(GV.getAlignment() <= Value::MaximumAlignment, |