A plea from Rakudo-land

Patrick R. Michaud pmichaud at pobox.com
Fri Jul 3 17:12:05 UTC 2009

As I've mentioned in the last couple of parrotsketch meetings, over
in Rakudo-land we're really seeing a large increase in memory-related
errors in recent Parrots.  Today's daily spectest run recorded 90
test failures:

  spectest-progress.csv update: 412 files, 11546 passing, 90 failing
  Failure summary:
    S05-grammar/parse_and_parsefile.t aborted 6 test(s)
    S05-metasyntax/regex.rakudo aborted 17 test(s)
    S12-enums/basic.rakudo 27 - short name of the enum without ...
    S16-filehandles/io.rakudo aborted 62 test(s)
    S32-num/rand.rakudo aborted 4 test(s)

The S12-enums/basic.rakudo and S32-num/rand.rakudo files are true
Rakudo bugs, and are already being addressed.  But the other 85 failing
tests represent places where this test run encountered problems that
are seemingly due to memory corruption issues in Parrot.

I'll provide more details in just a bit, but my overriding question
is:  How can we report these problems in a way that make it easier for
others to diagnose (and thus more likely to be fixed)?  The standard
answer ("provide a short PIR snippet") doesn't seem to be viable here;
in most cases I find that simply removing a line of Perl 6 source
or adding a comment is sufficient to cause the underlying error to
disappear altogether.  And, of course, any specific failure seems
be repeatable only for a specific revision of Parrot and Rakudo,
such that testing against any other configuration doesn't expose
the problem.

While waiting for an answer to the above question, I'll use
the rest of this message to describe (in gory detail) the current
set of failures I'm seeing.  For the results below I'm starting
from completely fresh checkouts and builds of Rakudo and Parrot,
built as follows:

  $ git clone git at github.com:rakudo/rakudo.git
  $ cd rakudo
  $ perl Configure.pl --gen-parrot
  $ make 
  $ make spectest

Rakudo is git revision 6a4d66, Parrot is svn revision r39868.
I'm performing the builds on x86 and x86_64 versions of Kubuntu 9.04.
Both the 32-bit and 64-bit versions result in spectest failures, but
fail in different places.

For any specific test there are at least four different ways we can 
run the test -- depending on the way it's invoked we can get different

  $ make t/spec/S05-metasyntax/regex.t
  $ ./perl6 t/spec/S05-metasyntax/regex.rakudo
  $ parrot/parrot    perl6.pbc t/spec/S05-metasyntax/regex.rakudo
  $ parrot/parrot -G perl6.pbc t/spec/S05-metasyntax/regex.rakudo

When invoked using this final form (with the -G flag to Parrot),
all test failures disappear entirely, regardless of platform.

For example, here are the results of the above four commands
on the S05-metasyntax/regex.t test above:

                  x86_64    x86
   make            abort   pass
   perl6           abort   pass
   parrot          abort   pass
   parrot -G       pass    pass

Here are the four commands on the S05-grammar/parse_and_parsefile.t 
test.  Note that unlike the above, this test passes without the -G 
flag to parrot, but still fails in the perl6 fakecutable:

                  x86_64    x86
   make            abort   pass
   perl6           abort   pass
   parrot          pass    pass
   parrot -G       pass    pass

Lest we think this is just a 64-bit problem, here's S04-statements/do.t

                  x86_64    x86
   make            pass    abort
   perl6           pass    abort
   parrot          pass    abort
   parrot -G       pass    pass

A bizarre note about S04-statements/do.t -- it's only the fudged version
(do.rakudo) that aborts.  The unfudged version (do.t) runs to completion 
on x86 without aborting, albeit with the (expected) 10 test failures.

Here are the full spectest results in the x86 and x86_64 environments

Failed Test                               Stat Wstat Total Fail  List of Failed
t/spec/S02-names_and_variables/names.raku               ??   ??  ??
t/spec/S03-operators/p5arrow.t                          ??   ??  ??
t/spec/S03-operators/smartmatch.rakudo                  ??   ??  ??
t/spec/S04-statements/do.rakudo                         ??   ??  ??
t/spec/S06-signature/named-parameters.rak               ??   ??  ??
t/spec/S10-packages/basic.rakudo             0     6    22    0  ??
t/spec/S12-enums/basic.rakudo                           30    1  27
t/spec/S32-array/exists.rakudo                          ??   ??  ??
2142 subtests skipped.
Failed 8/412 test scripts. 1/14009 subtests failed.

Failed Test                               Stat Wstat Total Fail  List of Failed
t/spec/S02-literals/array-interpolation.r    0    11    12   12  7-12
t/spec/S05-grammar/parse_and_parsefile.t                ??   ??  ??
t/spec/S05-metasyntax/charset.rakudo                    ??   ??  ??
t/spec/S05-metasyntax/regex.rakudo                      ??   ??  ??
t/spec/S10-packages/basic.rakudo             0     6    22    0  ??
t/spec/S12-construction/autopairs.t          0     6     4    2  4
t/spec/S12-enums/basic.rakudo                           30    1  27
t/spec/S32-array/push.rakudo                 0     6    44    0  ??
t/spec/S32-list/map.rakudo                   0    11    89  150  15-89
t/spec/S32-num/rand.rakudo                   0     6   110    0  ??
t/spec/integration/99problems-31-to-40.ra    0    11    67    4  66-67
2208 subtests skipped.
Failed 11/412 test scripts. 85/14199 subtests failed.

Personally, I really hope we can get this locked down before the 1.4
release.  Either that or I suspect we'll want to get the tests
(and perhaps Rakudo itself) to primarily run with the equivalent of
Parrot's -G flag in place.



More information about the parrot-dev mailing list