diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp index 0aa0944aeef9..cf1685a2e8c2 100644 --- a/llvm/lib/TableGen/Record.cpp +++ b/llvm/lib/TableGen/Record.cpp @@ -709,6 +709,8 @@ Init *UnOpInit::Fold(Record *CurRec, bool IsFinal) const { return StringInit::get(LHSi->getAsString()); } else if (isa(getType())) { if (StringInit *Name = dyn_cast(LHS)) { + if (!CurRec && !IsFinal) + break; assert(CurRec && "NULL pointer"); Record *D; diff --git a/llvm/test/TableGen/cast-multiclass.td b/llvm/test/TableGen/cast-multiclass.td new file mode 100644 index 000000000000..7c8ed5f1f048 --- /dev/null +++ b/llvm/test/TableGen/cast-multiclass.td @@ -0,0 +1,23 @@ +// RUN: llvm-tblgen %s | FileCheck %s + +class AClass { + bit Cond = C; +} + +def A0: AClass<0>; +def A1: AClass<1>; + +class BoolToList { + list ret = !if(Value, [1], []); +} + +multiclass P { + foreach i = BoolToList(AStr).Cond>.ret in + def SubDef; +} + +// CHECK-NOT: def XSubDef +defm X : P<"A0">; + +// CHECK: def YSubDef +defm Y : P<"A1">;