diff --git a/include/llvm/TableGen/Record.h b/include/llvm/TableGen/Record.h index 717347ae03b..713d9375448 100644 --- a/include/llvm/TableGen/Record.h +++ b/include/llvm/TableGen/Record.h @@ -1529,7 +1529,7 @@ public: // original record. All other fields can be copied normally. Record(const Record &O) : Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs), - Values(O.Values), SuperClasses(O.SuperClasses), + Values(O.Values), Assertions(O.Assertions), SuperClasses(O.SuperClasses), TrackedRecords(O.TrackedRecords), ID(LastID++), IsAnonymous(O.IsAnonymous), IsClass(O.IsClass) { } diff --git a/lib/TableGen/TGParser.cpp b/lib/TableGen/TGParser.cpp index 8d228d73f25..cae0306b23b 100644 --- a/lib/TableGen/TGParser.cpp +++ b/lib/TableGen/TGParser.cpp @@ -292,6 +292,9 @@ bool TGParser::AddSubClass(RecordsEntry &Entry, SubClassReference &SubClass) { if (Entry.Rec) return AddSubClass(Entry.Rec.get(), SubClass); + if (Entry.Assertion) + return false; + for (auto &E : Entry.Loop->Entries) { if (AddSubClass(E, SubClass)) return true; diff --git a/test/TableGen/assert.td b/test/TableGen/assert.td index fb8f7beccc8..d616adcb5d0 100644 --- a/test/TableGen/assert.td +++ b/test/TableGen/assert.td @@ -189,3 +189,18 @@ multiclass MC4 : MC2 { } defm Rec44 : MC4<"xecret code">; + +// Test a defm in a multiclass that inherits from a class with asserts. + +// CHECK: assertion failed +// CHECK: note: MC5 name must include a space: Ada_Lovelace +// CHECK: assertion failed +// CHECK: note: person age is invalid: 666 + +multiclass MC5 { + assert !ne(!find(name, " "), -1), "MC5 name must include a space: " # name; + + defm _mc5 : MC2, Person; +} + +defm Rec45 : MC5<"secret password", "Ada_Lovelace", 666>;