# New Ticket Created by Elizabeth Mattijsen
# Please include the string: [perl #127748]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=127748 >
==========================
my $a = 14;
while (True) {
my $z = (2..13).first(-> $x { !($a %% $x) });
last if (!$z);
$a += 14
}
say $a
==========================
The above code “verbatim” segfaults on OS X and Linux on HEAD.
Replacing either the (True) by True, or (!$z) by !$z, or adding an additional
say after the loop, will make the code succeed.
Looking at the output of —target=optimize between (!$z) and !$z, I see only
this significant difference:
- - QAST::Op(callstatic &prefix:<!>) :BY<modifier_expr W> :statement_id<?>
:WANTED !
+ - QAST::Op(callstatic &prefix:<!>) :BY<modifier_expr W> :WANTED !
I would have sorta expected that the () would not make a difference for the
generated code at all, but apparently it does?
Also, disabling spesh or JIT does not seem to make a difference.
In any case, I thought this would be a nice thing for the right people. :-)
Discussion at: http://irclog.perlgeek.de/perl6/2016-03-20#i_12212186
Liz