mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
[TableGen] Fix two bugs in 'defm' when complex 'assert' is involved.
This patch fixes two bugs that arise when a 'defm' inherits from a multiclass and also from a class with assertions. Differential Revision: https://reviews.llvm.org/D101626
This commit is contained in:
parent
f3733a51e7
commit
7a240cb6b2
@ -1529,7 +1529,7 @@ public:
|
|||||||
// original record. All other fields can be copied normally.
|
// original record. All other fields can be copied normally.
|
||||||
Record(const Record &O)
|
Record(const Record &O)
|
||||||
: Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs),
|
: 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++),
|
TrackedRecords(O.TrackedRecords), ID(LastID++),
|
||||||
IsAnonymous(O.IsAnonymous), IsClass(O.IsClass) { }
|
IsAnonymous(O.IsAnonymous), IsClass(O.IsClass) { }
|
||||||
|
|
||||||
|
@ -292,6 +292,9 @@ bool TGParser::AddSubClass(RecordsEntry &Entry, SubClassReference &SubClass) {
|
|||||||
if (Entry.Rec)
|
if (Entry.Rec)
|
||||||
return AddSubClass(Entry.Rec.get(), SubClass);
|
return AddSubClass(Entry.Rec.get(), SubClass);
|
||||||
|
|
||||||
|
if (Entry.Assertion)
|
||||||
|
return false;
|
||||||
|
|
||||||
for (auto &E : Entry.Loop->Entries) {
|
for (auto &E : Entry.Loop->Entries) {
|
||||||
if (AddSubClass(E, SubClass))
|
if (AddSubClass(E, SubClass))
|
||||||
return true;
|
return true;
|
||||||
|
@ -189,3 +189,18 @@ multiclass MC4<string phr> : MC2<phr> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defm Rec44 : MC4<"xecret code">;
|
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<string phr, string name, int age> {
|
||||||
|
assert !ne(!find(name, " "), -1), "MC5 name must include a space: " # name;
|
||||||
|
|
||||||
|
defm _mc5 : MC2<phr>, Person<name, age>;
|
||||||
|
}
|
||||||
|
|
||||||
|
defm Rec45 : MC5<"secret password", "Ada_Lovelace", 666>;
|
||||||
|
Loading…
Reference in New Issue
Block a user