This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix spurious 'Use of reference' warning
authorDavid Mitchell <davem@iabyn.com>
Wed, 10 Dec 2014 13:20:38 +0000 (13:20 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 10 Dec 2014 13:25:57 +0000 (13:25 +0000)
commitb48c4cbac0e21d2d8ae2c5f1929b2a4761dc9868
treefa66e3dca1a5f984d251d38dc31ec32acf76f2f7
parentdacd91898fcfc21090ad48dd88483172a4bc8914
fix spurious 'Use of reference' warning

My recent OP_MULTIDEREF addition introduced a bug where, when
converting a constant array index into a UV, it checked for a ref
and issued a "Use of reference "HASH(0x7fd190915ba8)" as array index"
warning *before* it had confirmed that the OP_CONST was the only op in
the index expression. So things like

    use constant HASHREF => { a => 1 };
    () = $_[HASHREF->{a} ];

would generate two spurious warnings.

The fix is easy. Only test for the warning on the second pass;
we'll already have abandoned the optimisation attempt on the first pass
if the index expression isn't a simple constant.
op.c
t/lib/warnings/pp_hot