diff options
| author | Artyom Skrobov <Artyom.Skrobov@arm.com> | 2014-06-10 12:41:14 +0000 |
|---|---|---|
| committer | Artyom Skrobov <Artyom.Skrobov@arm.com> | 2014-06-10 12:41:14 +0000 |
| commit | 8b98532af93343fdd3ed5399863d1ac1389f8d4f (patch) | |
| tree | d08c1177d47b6bae6595d026b8ff7f9809aafb73 | |
| parent | 9ffd0b020f5e128edcc403aee0bc1d7b0ea3b754 (diff) | |
| download | bcm5719-llvm-8b98532af93343fdd3ed5399863d1ac1389f8d4f.tar.gz bcm5719-llvm-8b98532af93343fdd3ed5399863d1ac1389f8d4f.zip | |
Anonymous definitions in foreach blocks triggered a 'def already exists'
llvm-svn: 210526
| -rw-r--r-- | llvm/lib/TableGen/TGParser.cpp | 9 | ||||
| -rw-r--r-- | llvm/test/TableGen/ForeachLoop.td | 26 |
2 files changed, 32 insertions, 3 deletions
diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp index 2c6a46cb0bc..f337c75ed5e 100644 --- a/llvm/lib/TableGen/TGParser.cpp +++ b/llvm/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/llvm/test/TableGen/ForeachLoop.td b/llvm/test/TableGen/ForeachLoop.td index 4aacc74d8aa..25208fae227 100644 --- a/llvm/test/TableGen/ForeachLoop.td +++ b/llvm/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"; + |

