From: Artyom Skrobov Date: Tue, 10 Jun 2014 12:41:14 +0000 (+0000) Subject: Anonymous definitions in foreach blocks triggered a 'def already exists' X-Git-Tag: android-x86-7.1-r4~60958 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2093e88d67a92721fe070b93dda01a6946079f2f;p=android-x86%2Fexternal-llvm.git Anonymous definitions in foreach blocks triggered a 'def already exists' git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210526 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/TableGen/TGParser.cpp b/lib/TableGen/TGParser.cpp index 2c6a46cb0bc..f337c75ed5e 100644 --- a/lib/TableGen/TGParser.cpp +++ b/lib/TableGen/TGParser.cpp @@ -360,8 +360,13 @@ bool TGParser::ProcessForeachDefs(Record *CurRec, SMLoc Loc, IterSet &IterVals){ } if (Records.getDef(IterRec->getNameInitAsString())) { - Error(Loc, "def already exists: " + IterRec->getNameInitAsString()); - return true; + // If this record is anonymous, it's no problem, just generate a new name + if (IterRec->isAnonymous()) + IterRec->setName(GetNewAnonymousName()); + else { + Error(Loc, "def already exists: " + IterRec->getNameInitAsString()); + return true; + } } Records.addDef(IterRec); diff --git a/test/TableGen/ForeachLoop.td b/test/TableGen/ForeachLoop.td index 4aacc74d8aa..25208fae227 100644 --- a/test/TableGen/ForeachLoop.td +++ b/test/TableGen/ForeachLoop.td @@ -51,8 +51,10 @@ foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in // CHECK: string Name = "R7"; // CHECK: int Index = 7; -foreach i = {0-3,9-7} in +foreach i = {0-3,9-7} in { def S#i : Register<"Q"#i, i>; + def : Register<"T"#i, i>; +} // CHECK: def S0 // CHECK: def S1 @@ -61,3 +63,25 @@ foreach i = {0-3,9-7} in // CHECK: def S7 // CHECK: def S8 // CHECK: def S9 + +// CHECK: def +// CHECK: string Name = "T0"; + +// CHECK: def +// CHECK: string Name = "T1"; + +// CHECK: def +// CHECK: string Name = "T2"; + +// CHECK: def +// CHECK: string Name = "T3"; + +// CHECK: def +// CHECK: string Name = "T9"; + +// CHECK: def +// CHECK: string Name = "T8"; + +// CHECK: def +// CHECK: string Name = "T7"; +