From: Sebastian Neubauer Date: Fri, 29 May 2020 14:35:57 +0000 (+0200) Subject: [TableGen] Add error messages X-Git-Tag: llvmorg-12-init~2256 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d668d8b6197545cb8d8749c5c58b18ccd4468ddd;p=platform%2Fupstream%2Fllvm.git [TableGen] Add error messages Print an error instead of crashing in two places. Differential Revision: https://reviews.llvm.org/D81074 --- diff --git a/llvm/utils/TableGen/SearchableTableEmitter.cpp b/llvm/utils/TableGen/SearchableTableEmitter.cpp index 0c79a2a..326cb4e 100644 --- a/llvm/utils/TableGen/SearchableTableEmitter.cpp +++ b/llvm/utils/TableGen/SearchableTableEmitter.cpp @@ -119,9 +119,12 @@ private: return "Intrinsic::" + getIntrinsic(I).EnumName; else if (Field.IsInstruction) return I->getAsString(); - else if (Field.Enum) - return std::string( - Field.Enum->EntryMap[cast(I)->getDef()]->first); + else if (Field.Enum) { + auto *Entry = Field.Enum->EntryMap[cast(I)->getDef()]; + if (!Entry) + PrintFatalError(Twine("Entry for field '") + Field.Name + "' is null"); + return std::string(Entry->first); + } PrintFatalError(Twine("invalid field type for field '") + Field.Name + "', expected: string, bits, bit or code"); } @@ -596,6 +599,9 @@ void SearchableTableEmitter::collectEnumEntries( void SearchableTableEmitter::collectTableEntries( GenericTable &Table, const std::vector &Items) { + if (Items.empty()) + PrintWarning(Twine("Table '") + Table.Name + "' has no items"); + for (auto EntryRec : Items) { for (auto &Field : Table.Fields) { auto TI = dyn_cast(EntryRec->getValueInit(Field.Name)); @@ -624,6 +630,10 @@ void SearchableTableEmitter::collectTableEntries( Record *IntrinsicClass = Records.getClass("Intrinsic"); Record *InstructionClass = Records.getClass("Instruction"); for (auto &Field : Table.Fields) { + if (!Field.RecType) + PrintFatalError(Twine("Cannot determine type of field '") + Field.Name + + "' in table '" + Table.Name + "'. Maybe it is not used?"); + if (auto RecordTy = dyn_cast(Field.RecType)) { if (IntrinsicClass && RecordTy->isSubClassOf(IntrinsicClass)) Field.IsIntrinsic = true;