From: David Majnemer Date: Tue, 9 Dec 2014 05:50:11 +0000 (+0000) Subject: Revert "AsmParser: Reject invalid mismatch between forward ref and def" X-Git-Tag: android-x86-7.1-r4~54685 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ebddbe8ba6272200bc9c3ba90d3450d95486f66e;p=android-x86%2Fexternal-llvm.git Revert "AsmParser: Reject invalid mismatch between forward ref and def" This reverts commit r223754. I've upset the buildbots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223755 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index df4a16abe1c..e1c00cc4af0 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -787,36 +787,33 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc, if (Ty->isFunctionTy() || Ty->isLabelTy()) return Error(TyLoc, "invalid type for global variable"); - GlobalValue *GVal = nullptr; + GlobalVariable *GV = nullptr; // See if the global was forward referenced, if so, use the global. if (!Name.empty()) { - GVal = M->getNamedValue(Name); - if (GVal) { + if (GlobalValue *GVal = M->getNamedValue(Name)) { if (!ForwardRefVals.erase(Name) || !isa(GVal)) return Error(NameLoc, "redefinition of global '@" + Name + "'"); + GV = cast(GVal); } } else { std::map >::iterator I = ForwardRefValIDs.find(NumberedVals.size()); if (I != ForwardRefValIDs.end()) { - GVal = I->second.first; + GV = cast(I->second.first); ForwardRefValIDs.erase(I); } } - GlobalVariable *GV; if (!GV) { GV = new GlobalVariable(*M, Ty, false, GlobalValue::ExternalLinkage, nullptr, Name, nullptr, GlobalVariable::NotThreadLocal, AddrSpace); } else { - if (GVal->getType()->getElementType() != Ty) + if (GV->getType()->getElementType() != Ty) return Error(TyLoc, "forward reference and definition of global have different types"); - GV = cast(GVal); - // Move the forward-reference to the correct spot in the module. M->getGlobalList().splice(M->global_end(), M->getGlobalList(), GV); } diff --git a/test/Assembler/invalid-fwdref2.ll b/test/Assembler/invalid-fwdref2.ll deleted file mode 100644 index d823481f8e1..00000000000 --- a/test/Assembler/invalid-fwdref2.ll +++ /dev/null @@ -1,4 +0,0 @@ -; RUN: not llvm-as %s -disable-output 2>&1 | grep "forward reference and definition of global have different types" - -@a2 = alias void ()* @g2 -@g2 = internal global i8 42