Fix bug caused by:
%list = type opaque
%list = type %list


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@931 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index 128d479..28562ac 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -431,7 +431,7 @@
   ValID &DID = getValIDFromPlaceHolder(Ty);
 
   const Type *TheRealType = getTypeVal(DID, true);
-  if (TheRealType == 0) return true;
+  if (TheRealType == 0 || TheRealType == Ty) return true;
 
   // Refine the opaque type we had to the new type we are getting.
   cast<DerivedType>(Ty)->refineAbstractTypeTo(TheRealType);
@@ -450,7 +450,7 @@
       ValID &DID = getValIDFromPlaceHolder(Ty);
 
       if (DID.Type == ValID::NameVal)
-	ThrowException("Reference to an invalid type: '" +DID.getName(),
+	ThrowException("Reference to an invalid type: '" +DID.getName() + "'",
 		       getLineNumFromPlaceHolder(Ty));
       else
 	ThrowException("Reference to an invalid type: #" + itostr(DID.Num),