From 74fd80e8fc5866f12818b3b54c6099efde871527 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Thu, 24 May 2012 22:17:36 +0000 Subject: [PATCH] Don't put TGParser scratch results in the output. Only fully expanded Records should go into RecordKeeper. llvm-svn: 157431 --- llvm/include/llvm/TableGen/Record.h | 10 ++++++---- llvm/lib/TableGen/TGParser.cpp | 4 ++-- llvm/test/TableGen/ForeachLoop.td | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/llvm/include/llvm/TableGen/Record.h b/llvm/include/llvm/TableGen/Record.h index 3aea1ae..a8256b7 100644 --- a/llvm/include/llvm/TableGen/Record.h +++ b/llvm/include/llvm/TableGen/Record.h @@ -1558,12 +1558,14 @@ public: return I == Defs.end() ? 0 : I->second; } void addClass(Record *R) { - assert(getClass(R->getNameInitAsString()) == 0 && "Class already exists!"); - Classes.insert(std::make_pair(R->getNameInitAsString(), R)); + bool Ins = Classes.insert(std::make_pair(R->getName(), R)).second; + (void)Ins; + assert(Ins && "Class already exists"); } void addDef(Record *R) { - assert(getDef(R->getNameInitAsString()) == 0 && "Def already exists!"); - Defs.insert(std::make_pair(R->getNameInitAsString(), R)); + bool Ins = Defs.insert(std::make_pair(R->getName(), R)).second; + (void)Ins; + assert(Ins && "Record already exists"); } /// removeClass - Remove, but do not delete, the specified record. diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp index 68d9ef4..b23f410 100644 --- a/llvm/lib/TableGen/TGParser.cpp +++ b/llvm/lib/TableGen/TGParser.cpp @@ -1903,7 +1903,7 @@ bool TGParser::ParseDef(MultiClass *CurMultiClass) { // Parse ObjectName and make a record for it. Record *CurRec = new Record(ParseObjectName(CurMultiClass), DefLoc, Records); - if (!CurMultiClass) { + if (!CurMultiClass && Loops.empty()) { // Top-level def definition. // Ensure redefinition doesn't happen. @@ -1913,7 +1913,7 @@ bool TGParser::ParseDef(MultiClass *CurMultiClass) { return true; } Records.addDef(CurRec); - } else { + } else if (CurMultiClass) { // Otherwise, a def inside a multiclass, add it to the multiclass. for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size(); i != e; ++i) if (CurMultiClass->DefPrototypes[i]->getNameInit() diff --git a/llvm/test/TableGen/ForeachLoop.td b/llvm/test/TableGen/ForeachLoop.td index e2defe9..3426096 100644 --- a/llvm/test/TableGen/ForeachLoop.td +++ b/llvm/test/TableGen/ForeachLoop.td @@ -9,6 +9,7 @@ class Register { foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in def R#i : Register<"R"#i, i>; +// CHECK-NOT: !strconcat // CHECK: def R0 // CHECK: string Name = "R0"; -- 2.7.4