[llvm-commits] [llvm] r61720 - /llvm/trunk/lib/AsmParser/LLParser.cpp

Chris Lattner sabre at nondot.org
Mon Jan 5 10:19:47 PST 2009


Author: lattner
Date: Mon Jan  5 12:19:46 2009
New Revision: 61720

URL: http://llvm.org/viewvc/llvm-project?rev=61720&view=rev
Log:
reject PR3281:crash09.ll with this diagnostic:

llvm-as: crash09.ll:3:1: self referential type is invalid
type %0
^


Modified:
    llvm/trunk/lib/AsmParser/LLParser.cpp

Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61720&r1=61719&r2=61720&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan  5 12:19:46 2009
@@ -238,6 +238,9 @@
   std::map<unsigned, std::pair<PATypeHolder, LocTy> >::iterator
     FI = ForwardRefTypeIDs.find(TypeID);
   if (FI != ForwardRefTypeIDs.end()) {
+    if (FI->second.first.get() == Ty)
+      return Error(TypeLoc, "self referential type is invalid");
+    
     cast<DerivedType>(FI->second.first.get())->refineAbstractTypeTo(Ty);
     Ty = FI->second.first.get();
     ForwardRefTypeIDs.erase(FI);
@@ -275,6 +278,9 @@
   std::map<std::string, std::pair<PATypeHolder, LocTy> >::iterator
   FI = ForwardRefTypes.find(Name);
   if (FI != ForwardRefTypes.end()) {
+    if (FI->second.first.get() == Ty)
+      return Error(NameLoc, "self referential type is invalid");
+
     cast<DerivedType>(FI->second.first.get())->refineAbstractTypeTo(Ty);
     Ty = FI->second.first.get();
     ForwardRefTypes.erase(FI);





More information about the llvm-commits mailing list