[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