diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-10-25 23:22:50 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-10-25 23:22:50 +0000 | 
| commit | 1d871c5e547996a8dd5192e48d22aadf11cd2a9d (patch) | |
| tree | 63629562e6b5d6efb35e15a44a8b8dad7a755c8c /lib/AsmParser/LLParser.cpp | |
| parent | 22bbd9b9b89806fa9099442f8892f4e970ca54e9 (diff) | |
fix PR5295 where the .ll parser didn't reject a function after a global
or global after a function with conflicting names.  Update some testcases
that were accidentally depending on this behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85081 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/LLParser.cpp')
| -rw-r--r-- | lib/AsmParser/LLParser.cpp | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 52fd2b21e1..fa803bb1e9 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -603,8 +603,7 @@ bool LLParser::ParseAlias(const std::string &Name, LocTy NameLoc,    // See if this value already exists in the symbol table.  If so, it is either    // a redefinition or a definition of a forward reference. -  if (GlobalValue *Val = -        cast_or_null<GlobalValue>(M->getValueSymbolTable().lookup(Name))) { +  if (GlobalValue *Val = M->getNamedValue(Name)) {      // See if this was a redefinition.  If so, there is no entry in      // ForwardRefVals.      std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator @@ -671,9 +670,11 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc,    // See if the global was forward referenced, if so, use the global.    if (!Name.empty()) { -    if ((GV = M->getGlobalVariable(Name, true)) && -        !ForwardRefVals.erase(Name)) -      return Error(NameLoc, "redefinition of global '@" + Name + "'"); +    if (GlobalValue *GVal = M->getNamedValue(Name)) { +      if (!ForwardRefVals.erase(Name) || !isa<GlobalValue>(GVal)) +        return Error(NameLoc, "redefinition of global '@" + Name + "'"); +      GV = cast<GlobalVariable>(GVal); +    }    } else {      std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator        I = ForwardRefValIDs.find(NumberedVals.size()); @@ -2563,6 +2564,8 @@ bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {               AI != AE; ++AI)            AI->setName("");        } +    } else if (M->getNamedValue(FunctionName)) { +      return Error(NameLoc, "redefinition of function '@" + FunctionName + "'");      }    } else {  | 
