Skip to content

Commit 576aa3a

Browse files
authored
[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 <[email protected]>
1 parent 0abb779 commit 576aa3a

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

llvm/lib/TableGen/TGParser.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4460,8 +4460,13 @@ bool TGParser::ParseDump(MultiClass *CurMultiClass, Record *CurRec) {
44604460

44614461
if (CurRec)
44624462
CurRec->addDump(Loc, Message);
4463-
else
4464-
addEntry(std::make_unique<Record::DumpInfo>(Loc, Message));
4463+
else {
4464+
HasReferenceResolver resolver{nullptr};
4465+
resolver.setFinal(true);
4466+
// force a resolution with a dummy resolver
4467+
Init *ResolvedMessage = Message->resolveReferences(resolver);
4468+
addEntry(std::make_unique<Record::DumpInfo>(Loc, ResolvedMessage));
4469+
}
44654470

44664471
return false;
44674472
}

llvm/test/TableGen/dump.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,6 @@ def Three : BaseClassForSet;
101101
}
102102
// CHECK: [[FILE]]:[[@LINE+1]]:1: note: TheSet = [Subset_One, Subset_Two, Three]
103103
dump "TheSet = " # !repr(TheSet);
104+
105+
// CHECK: [[FILE]]:[[@LINE+1]]:1: note: 0
106+
dump !repr(!exists<BaseClassForSet>("non-existent-record"));

0 commit comments

Comments
 (0)