diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp --- a/llvm/lib/TableGen/TGParser.cpp +++ b/llvm/lib/TableGen/TGParser.cpp @@ -3254,8 +3254,8 @@ Substs.emplace_back(QualifiedNameOfImplicitName(MC), DefmName); - if (resolve(MC->Entries, Substs, CurMultiClass == nullptr, &NewEntries, - &SubClassLoc)) + if (resolve(MC->Entries, Substs, CurMultiClass == nullptr && Loops.empty(), + &NewEntries, &SubClassLoc)) return true; if (!consume(tgtok::comma)) diff --git a/llvm/test/TableGen/foreach-multiclass.td b/llvm/test/TableGen/foreach-multiclass.td --- a/llvm/test/TableGen/foreach-multiclass.td +++ b/llvm/test/TableGen/foreach-multiclass.td @@ -57,6 +57,11 @@ // CHECK: def F2_2_1 // CHECK-NOT: def F2_2_2 +// CHECK: def MD0A +// CHECK-NOT: def MD0B +// CHECK: def MD1A +// CHECK: def MD1B + multiclass A { foreach i = [0, 1] in { def NAME#i { @@ -116,3 +121,7 @@ defm F0 : F<[]>; defm F1 : F<[0]>; defm F2 : F<[0, 1, 2]>; + +foreach ShouldI = 0-1 in +defm MD#ShouldI : D; +