Ron Blaschke wrote: > Joshua Isom wrote: >> On Oct 13, 2007, at 7:20 AM, Ron Blaschke wrote: >>> Attached patch should fix computed goto on Solaris with the Sun C >>> compiler. > [snip] >>> Could someone please review the patch if I got it right, and maybe test >>> it on other computed goto platforms? >> Just to clarify, you did reenable CGP in compilers/imcc/main.c, >> correct? It's been disabled for a while. > > Bummer, no I did not. I thought everything was connected to Configure's > --cgoto. Thanks for noticing, Joshua. > > chromatic, thanks for giving it a spin. Since it's working for you I > guess it'll work on Solaris as well, but I'll verify on Monday. This > time, the right way.
I've revised the patch a bit (r22073 introduced an incompatible change) and tested it against r22101. $make testC All tests successful (1 subtest UNEXPECTEDLY SUCCEEDED), 8 tests and 242 subtests skipped. Passed TODO Stat Wstat TODOs Pass List of Passed ------------------------------------------------------------------------------- t/op/debuginfo.t 2 1 8 Files=222, Tests=4816, 995 wallclock secs (439.78 cusr + 369.99 csys = 809.77 CPU) Ron
Index: lib/Parrot/OpTrans/CGP.pm =================================================================== --- lib/Parrot/OpTrans/CGP.pm (revision 22101) +++ lib/Parrot/OpTrans/CGP.pm (working copy) @@ -91,7 +91,7 @@ return "if ($addr == 0) return 0; _reg_base = (char*)interp->ctx.bp.regs_i; - goto **(cur_opcode = opcode_to_prederef(interp, $addr))"; + goto **(void **)(cur_opcode = opcode_to_prederef(interp, $addr))"; } } @@ -105,7 +105,7 @@ sub goto_offset { my ( $self, $offset ) = @_; - return "goto **(cur_opcode += $offset)"; + return "goto **(void **)(cur_opcode += $offset)"; } =item C<goto_pop()> @@ -118,7 +118,7 @@ sub goto_pop { my ($self) = @_; - return "goto **(opcode_t *)(cur_opcode = opcode_to_prederef(interp, + return "goto **(void **)(cur_opcode = opcode_to_prederef(interp, (opcode_t*)pop_dest(interp)))"; } Index: lib/Parrot/Ops2c/Utils.pm =================================================================== --- lib/Parrot/Ops2c/Utils.pm (revision 22101) +++ lib/Parrot/Ops2c/Utils.pm (working copy) @@ -588,7 +588,7 @@ # endif #endif _reg_base = (char*)interp->ctx.bp.regs_i; - goto **cur_opcode; + goto **(void **)cur_opcode; END_C }