I tried the evaluation from this bug report and didn't get that internal error anymore. There is still a type check error, though (which looks plausible to me):
$ perl6-m -e 'sub p(*@l) { gather { if @l == 1 { take @l } else { @l.shift; for p(@l) -> @p {} } } }; say p 1..4' Type check failed in binding @p; expected 'Positional' but got 'Int' in block at -e:1 If I change @p to a scalar container $p, the code does not die: $ perl6-m -e 'sub p(*@l) { gather { if @l == 1 { take @l } else { @l.shift; for p(@l) -> $p {} } } }; say p 1..4; say "alive"' alive I'm not quite sure how a proper test for this ticket would look like. Just testing for X::TypeCheck?