This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #123753] Assert fail with &{+foo} and errors
authorFather Chrysostomos <sprout@cpan.org>
Sun, 8 Feb 2015 03:22:00 +0000 (19:22 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 8 Feb 2015 03:22:00 +0000 (19:22 -0800)
commiteea89386b3fb948a8b1eb5ea860ec0a970c9e559
tree9ef2b1c60f57ea3d8a457f6a0fb8b9bc46b76a84
parent218721242848e642c0d1399644b6a90969e485e3
[perl #123753] Assert fail with &{+foo} and errors

This fixes the problem mentioned in 3c47da3c2e with an op address
being used as flags.  '&' not followed by a identifier was being fed
to the parser with a stale token value, left over from the previous
token that had a value, which might be an op address.  This would
cause the flags on the op to vary randomly.

Usually the rv2cv op created this way is nulled, but if there is a
syntax error it may be freed before that happens.  And it is when the
op is freed that the private flags are checked to make sure no invalid
flags have been set.

The test added to t/op/lex.t used to fail an assertion (for me) more
than half the time, but not always, because the 0x10 bit was being set
in op_private (rv2cv does not use that bit).
t/op/lex.t
toke.c