This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
assertion failure on foo(my $x : bar)
authorDavid Mitchell <davem@iabyn.com>
Mon, 23 Nov 2015 08:15:40 +0000 (08:15 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 23 Nov 2015 08:46:48 +0000 (08:46 +0000)
commit04106f2e5c6e8162bd22fd9c7505096116e483cd
tree76e1a920c6a8a0f36eecef284cb46f715a798a38
parenta44fa0ed58afff072b11bd6c614f4b730b4bae7e
assertion failure on foo(my $x : bar)

RT #126257

'my var : attr' injects a void-context sub call just after the
pad op. However, Perl_ck_entersub_args_list() tries to impose lvalue
context on each of its args, which causes an assertion failure.

This commit makes Perl_ck_entersub_args_list() skip calling op_lvalue()
on any args which are OP_ENTERSUB/OPf_WANT_VOID. Strictly
speaking it should check that the sub call is actually an attribute
method call (e.g. first child is a const("attibutes") etc), but this
was far too much like hard work.
op.c
t/op/attrs.t