[TableGen] Resolve References at top level (#104578)

Add a dummy resolver to resolve references outside records. This invokes
Fold() with isFinal to force resolution.

Fixes #102447

Co-authored-by: Akshat Oke <Akshat.Oke@amd.com>
This commit is contained in:
Akshat Oke 2024-08-19 21:05:39 +05:30 committed by GitHub
parent 0abb779161
commit 576aa3a509
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 2 deletions

View File

@ -4460,8 +4460,13 @@ bool TGParser::ParseDump(MultiClass *CurMultiClass, Record *CurRec) {
if (CurRec)
CurRec->addDump(Loc, Message);
else
addEntry(std::make_unique<Record::DumpInfo>(Loc, Message));
else {
HasReferenceResolver resolver{nullptr};
resolver.setFinal(true);
// force a resolution with a dummy resolver
Init *ResolvedMessage = Message->resolveReferences(resolver);
addEntry(std::make_unique<Record::DumpInfo>(Loc, ResolvedMessage));
}
return false;
}

View File

@ -101,3 +101,6 @@ def Three : BaseClassForSet;
}
// CHECK: [[FILE]]:[[@LINE+1]]:1: note: TheSet = [Subset_One, Subset_Two, Three]
dump "TheSet = " # !repr(TheSet);
// CHECK: [[FILE]]:[[@LINE+1]]:1: note: 0
dump !repr(!exists<BaseClassForSet>("non-existent-record"));