# New Ticket Created by  Dan Sugalski 
# Please include the string:  [perl #32996]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org:80/rt3/Ticket/Display.html?id=32996 >


The register coloring algorithm's not dirtying registers right, and 
looks to be assuming that things are in registers across method calls 
when they really aren't. The following test program shows the 
problem. While it should print "In method 1\nIn method 2\n" a few 
dozen times, instead it dies partway through. From a trace it looks 
like the coloring algorithm assumes that an object is in a register 
that gets clobbered (correctly) by the method calls.

.namespace ["Foo"]

.sub __biginit prototyped, @MAIN
        newclass $P0, "Foo"
        $I1 = find_type "Foo"
        $P1 = new $I1
        $P1.method1()
        $P1.method2()

        $P2 = new $I1
        $P2.method1()
        $P2.method2()

        $P3 = new $I1
        $P3.method1()
        $P3.method2()

        $P4 = new $I1
        $P4.method1()
        $P4.method2()

        $P5 = new $I1
        $P5.method1()
        $P5.method2()

        $P6 = new $I1
        $P6.method1()
        $P6.method2()

        $P7 = new $I1
        $P7.method1()
        $P7.method2()

        $P8 = new $I1
        $P8.method1()
        $P8.method2()

        $P9 = new $I1
        $P9.method1()
        $P9.method2()

        $P10 = new $I1
        $P10.method1()
        $P10.method2()

        $P11 = new $I1
        $P11.method1()
        $P11.method2()

        $P12 = new $I1
        $P12.method1()
        $P12.method2()

        $P13 = new $I1
        $P13.method1()
        $P13.method2()

        $P14 = new $I1
        $P14.method1()
        $P14.method2()

        $P15 = new $I1
        $P15.method1()
        $P15.method2()

        $P1.method1()
        $P1.method2()
        $P2.method1()
        $P2.method2()
        $P3.method1()
        $P3.method2()
        $P4.method1()
        $P4.method2()
        $P5.method1()
        $P5.method2()
        $P6.method1()
        $P6.method2()
        $P7.method1()
        $P7.method2()
        $P8.method1()
        $P8.method2()
        $P9.method1()
        $P9.method2()
        $P10.method1()
        $P10.method2()
        $P11.method1()
        $P11.method2()
        $P12.method1()
        $P12.method2()
        $P13.method1()
        $P13.method2()
        $P14.method1()
        $P14.method2()
        $P15.method1()
        $P15.method2()

        end
.end

.sub method1 prototyped, method
        print "In method 1\n"
        .pcc_begin_return
        .pcc_end_return
.end

.sub method2 prototyped, method
        print "In method 2\n"
        .pcc_begin_return
        .pcc_end_return
.end


-- 
                                Dan

--------------------------------------it's like this-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                       teddy bears get drunk

Reply via email to