Ignore X = X assignments that was causing Alkis's rewrite of X86.td to crash
authorChris Lattner <sabre@nondot.org>
Sat, 28 Feb 2004 17:31:28 +0000 (17:31 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 28 Feb 2004 17:31:28 +0000 (17:31 +0000)
tblgen.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11948 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/FileParser.y

index af8d3d4ff285ae6c252dadcb97a67cce6d84f8a0..d0f88c30c046c0ac0a21cfe6e0471c5918cfbac4 100644 (file)
@@ -68,13 +68,20 @@ static void addSuperClass(Record *SC) {
 
 static void setValue(const std::string &ValName, 
                     std::vector<unsigned> *BitList, Init *V) {
-  if (!V) return ;
+  if (!V) return;
 
   RecordVal *RV = CurRec->getValue(ValName);
   if (RV == 0) {
     err() << "Value '" << ValName << "' unknown!\n";
     exit(1);
   }
+
+  // Do not allow assignments like 'X = X'.  This will just cause infinite loops
+  // in the resolution machinery.
+  if (!BitList)
+    if (VarInit *VI = dynamic_cast<VarInit*>(V))
+      if (VI->getName() == ValName)
+        return;
   
   // If we are assigning to a subset of the bits in the value... then we must be
   // assigning to a field of BitsRecTy, which must have a BitsInit
@@ -154,10 +161,9 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
     }
   }
 
-
   // Since everything went well, we can now set the "superclass" list for the
   // current record.
-  const std::vector<Record*>   &SCs  = SC->getSuperClasses();
+  const std::vector<Record*> &SCs  = SC->getSuperClasses();
   for (unsigned i = 0, e = SCs.size(); i != e; ++i)
     addSuperClass(SCs[i]);
   addSuperClass(SC);