1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[TableGen] Diagnose undefined fields when generating searchable tables

Summary:
Previously TableGen would crash trying to print the undefined value as
an integer.

Change-Id: I3900071ceaa07c26acafb33bc49966d7d7a02828

Reviewers: nhaehnle

Subscribers: llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D74210
This commit is contained in:
Jay Foad 2020-02-07 11:13:51 +00:00
parent e54a43362b
commit 5aafdf1461
2 changed files with 20 additions and 1 deletions

View File

@ -1,4 +1,5 @@
// RUN: llvm-tblgen -gen-searchable-tables -I %p/../../include %s | FileCheck %s
// RUN: not llvm-tblgen -gen-searchable-tables -I %p/../../include -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s
// XFAIL: vg_leak
include "llvm/TableGen/SearchableTable.td"
@ -136,3 +137,21 @@ def lookupCEntry : SearchIndex {
let Table = CTable;
let Key = ["Name", "Kind"];
}
#ifdef ERROR1
class DEntry<string str, int val1> {
string Str = str;
bits<8> Val1 = val1;
}
def DFoo : DEntry<"foo", 1>;
// ERROR1: [[@LINE+1]]:1: error: Record 'DBar' in table 'DTable' is missing field 'Val1'
def DBar : DEntry<"bar", ?>;
def DTable : GenericTable {
let FilterClass = "DEntry";
let Fields = ["Str", "Val1"];
}
#endif // ERROR1

View File

@ -599,7 +599,7 @@ void SearchableTableEmitter::collectTableEntries(
for (auto EntryRec : Items) {
for (auto &Field : Table.Fields) {
auto TI = dyn_cast<TypedInit>(EntryRec->getValueInit(Field.Name));
if (!TI) {
if (!TI || !TI->isComplete()) {
PrintFatalError(EntryRec->getLoc(),
Twine("Record '") + EntryRec->getName() +
"' in table '" + Table.Name +