The first example works now as expected:
$ perl6-m -e 'sub foo ($a, $f) { if $f { foo("z", 0) }; given $a {say $a; say
$_} }; foo("x", 1)'
z
z
x
x
The second example works on rakudo.jvm but fails on rakudo.moar:
$ perl6-j -e 'sub foo ($a, $f) { if $f { foo("z", 0) }; {$_=$a; say $a; say $_}
}; foo("x", 1)'
z
z
x
x
$ perl6-m -e 'sub foo ($a, $f) { if $f { foo("z", 0) }; {$_=$a; say $a; say $_}
}; foo("x", 1)'
z
z
z
z
I added two tests (the second fudged 'todo' for Moar) to
S06-advanced/lexical-subs.t with commit
https://github.com/perl6/roast/commit/0867f11ce3