FAQ

On Sun Mar 20 06:39:39 2016, elizabeth wrote:
==========================
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
Was a GC invariant violation that occasionally led to memory corruption (thus why it was easy to make it vanish with silly changes). Actually a regression within the last month or two. Fixed it, and add a test to integration/weird-errors.t.

/jnthn

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupperl6-compiler @
categoriesperl
postedApr 1, '16 at 5:36p
activeApr 1, '16 at 5:36p
posts1
users1
websiteperl6.org

1 user in discussion

jnthn@jnthn.net via RT: 1 post

People

Translate

site design / logo © 2019 Grokbase