diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-03-30 01:37:13 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-03-30 01:37:13 +0000 |
commit | cd5bd90a7bc0ccb1ffce5e7dc62b1976493038c4 (patch) | |
tree | 6706e3ada8bf467d2adf123414063ccff6a4f03a /lib | |
parent | a5ad78e7460a3134861ae132498de99ed947066e (diff) | |
download | external_llvm-cd5bd90a7bc0ccb1ffce5e7dc62b1976493038c4.zip external_llvm-cd5bd90a7bc0ccb1ffce5e7dc62b1976493038c4.tar.gz external_llvm-cd5bd90a7bc0ccb1ffce5e7dc62b1976493038c4.tar.bz2 |
For PR1289:
Check at the end of the parse that there are no unresolved types and no
undefined values. Issue errors if there are. This gets rid of the need
for implementation or checkpoint by ensuring you can't finish a parse with
undefined things.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35499 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 4271273..3083196 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -2950,6 +2950,38 @@ static Module* RunParser(Module * M) { return 0; } + // Emit an error if there are any unresolved types left. + if (!CurModule.LateResolveTypes.empty()) { + const ValID &DID = CurModule.LateResolveTypes.begin()->first; + if (DID.Type == ValID::LocalName) { + GenerateError("Undefined type remains at eof: '"+DID.getName() + "'"); + } else { + GenerateError("Undefined type remains at eof: #" + itostr(DID.Num)); + } + if (ParserResult) + delete ParserResult; + return 0; + } + + // Emit an error if there are any unresolved values left. + if (!CurModule.LateResolveValues.empty()) { + Value *V = CurModule.LateResolveValues.back(); + std::map<Value*, std::pair<ValID, int> >::iterator I = + CurModule.PlaceHolderInfo.find(V); + + if (I != CurModule.PlaceHolderInfo.end()) { + ValID &DID = I->second.first; + if (DID.Type == ValID::LocalName) { + GenerateError("Undefined value remains at eof: "+DID.getName() + "'"); + } else { + GenerateError("Undefined value remains at eof: #" + itostr(DID.Num)); + } + if (ParserResult) + delete ParserResult; + return 0; + } + } + // Check to make sure that parsing produced a result if (!ParserResult) return 0; |