[llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y

Reid Spencer reid at x10sys.com
Thu Mar 29 18:37:30 PDT 2007



Changes in directory llvm/lib/AsmParser:

llvmAsmParser.y updated: 1.334 -> 1.335
---
Log message:

For PR1289: http://llvm.org/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.


---
Diffs of the changes:  (+32 -0)

 llvmAsmParser.y |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+)


Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.334 llvm/lib/AsmParser/llvmAsmParser.y:1.335
--- llvm/lib/AsmParser/llvmAsmParser.y:1.334	Thu Mar 29 13:49:28 2007
+++ llvm/lib/AsmParser/llvmAsmParser.y	Thu Mar 29 20:37:13 2007
@@ -2950,6 +2950,38 @@
     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;






More information about the llvm-commits mailing list