From: Daniel Sanders Date: Tue, 18 Feb 2020 21:12:28 +0000 (-0800) Subject: Fix assertion on `!eq(?, 0)` X-Git-Tag: llvmorg-12-init~14298 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c8ee5329bb1ff44ac5d827e3767b2e6ebdaf806;p=platform%2Fupstream%2Fllvm.git Fix assertion on `!eq(?, 0)` Instead of asserting, emit a proper error message --- diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp index 9314523..3d77497 100644 --- a/llvm/lib/TableGen/TGParser.cpp +++ b/llvm/lib/TableGen/TGParser.cpp @@ -1180,7 +1180,13 @@ Init *TGParser::ParseOperation(Record *CurRec, RecTy *ItemType) { InitList.push_back(ParseValue(CurRec, ArgType)); if (!InitList.back()) return nullptr; - RecTy *ListType = cast(InitList.back())->getType(); + TypedInit *InitListBack = dyn_cast(InitList.back()); + if (!InitListBack) { + Error(OpLoc, Twine("expected value to be a typed value, got '" + + InitList.back()->getAsString() + "'")); + return nullptr; + } + RecTy *ListType = InitListBack->getType(); if (!ArgType) { ArgType = ListType; diff --git a/llvm/test/TableGen/eq-unset.td b/llvm/test/TableGen/eq-unset.td new file mode 100644 index 0000000..57f06c3 --- /dev/null +++ b/llvm/test/TableGen/eq-unset.td @@ -0,0 +1,9 @@ +// RUN: not llvm-tblgen %s 2>&1 | FileCheck %s + +// CHECK: error: expected value to be a typed value, got '?' + +def Z1 { + // This one caused an assertion because the value was an UnsetInit + // and !eq() can only accept TypedInit's. + bit D = !if(!eq(?, 0), 1, 0); +}