# New Ticket Created by  "Clinton A. Pierce" 
# Please include the string:  [perl #22521]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=22521 >


I'm not sure what triggers this bug, but I can reliably reproduce it.  The 
code is *far* too large to list here, but this perl script will generate 
the appropriate code in larger and larger samples until it starts 
crashing.  Adjust as appropriate:

for($s=10; $s<10000; $s+=100) {
         print "Number: $s\n";
         open(IMCC, ">foo.imc") || die;
         print IMCC <<HEAD;
.sub main
         call _bug
         end
.end
.sub _bug
         saveall
         \$P1=new PerlHash
         \$P2=new PerlArray
HEAD
         for $l (0..$s) {
                 print IMCC <<BODY;
         \$P0=new PerlArray
         set \$P0[0], "FOO"
         set \$P0[1], "BAR"
         push \$P2, \$P0
         set \$P1["FOO$l"], $l
BODY
         }
         print IMCC<<FOOT;
         restoreall
         ret
.end
FOOT
         close(IMCC);
         system('..\..\imcc\imcc.exe foo.imc');
}

This cycles through with 110, 210, 310, repetitions of something like the 
following:

.sub main
         call _bug
         end
.end
.sub _bug
         saveall
         $P1=new PerlHash
         $P2=new PerlArray
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
         set $P1["FOO0"], 0
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
         set $P1["FOO1"], 1
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
         set $P1["FOO2"], 2
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
         set $P1["FOO3"], 3
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
         set $P1["FOO4"], 4
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
         set $P1["FOO5"], 5
         $P0=new PerlArray
         set $P0[0], "FOO"
         set $P0[1], "BAR"
         push $P2, $P0
        # And so on.....
         restoreall
         ret
.end

My system bails with a segfault at around 300-400 repetitions.  More if I 
make the .data sub the only thing in the .imc file.  This bug causes both 
chess and eliza to bail, as each has largish static data initializations.


        




Reply via email to