Attached patch should fix computed goto on Solaris with the Sun C compiler.

All tests successful (7 subtests UNEXPECTEDLY SUCCEEDED), 11 tests and
621 subtests skipped.
Passed TODO     Stat Wstat TODOs Pass  List of Passed
-------------------------------------------------------------------------------
t/src/intlist.t                4    4  1-4
t/src/io.t                     3    3  16-17 19
Files=349, Tests=7904, 1398 wallclock secs (668.38 cusr + 455.97 csys =
1124.35 CPU)

Could someone please review the patch if I got it right, and maybe test
it on other computed goto platforms?

Ron
Index: lib/Parrot/Ops2c/Utils.pm
===================================================================
--- lib/Parrot/Ops2c/Utils.pm   (revision 22065)
+++ 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
     }
Index: lib/Parrot/OpTrans/CGP.pm
===================================================================
--- lib/Parrot/OpTrans/CGP.pm   (revision 22065)
+++ 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()>
Index: PLATFORMS
===================================================================
--- PLATFORMS   (revision 22065)
+++ PLATFORMS   (working copy)
@@ -30,8 +30,8 @@
 sol8-sparc-cc                B    -    -    -     -   -   -    Y/412 ?  
20070917
 sol10-sparc-cc_5.8           B    Y    -    -     Y   Y   Y    Y/9   ?  
20060807
 sol10-sparc-gcc_4.0.2        B    Y    -    -     Y   Y   Y    Y/9   ?  
20060807
-sol10-x86-cc_5.9              4   -    -    -     -   -   Y    Y*4   ?  
20070914
-sol11-x86-cc_5.8                  -    -    -     -   -   -  Y/121*4 ?  
20070821
+sol10-x86-cc_5.9              4   -    -    -     -   -   Y    Y     ?  
20071010
+sol11-x86-cc_5.8                  -    -    -     -   -   -  Y/121   ?  
20070821
 opensolaris-x86-gcc_4.0.3     4   Y    Y    ?     ?   ?   Y    Y/3   ?  
20070417
 tru64-alpha-compaq_c6.5       8   ?    ?    ?     Y   ?   Y    Y/2   ?  
20060203
 win32-x86-cygwin_1.5.21           -    -    -     -   -   -    -     -  
20070221
@@ -71,7 +71,6 @@
 *2 some tests fail intermittently when building x86 on xeon processor
 *3 t/stm/basic_mt.t occasionally hangs. kill it for tests to complete. 
    1 other test fails. 7 unexpected todos succeed.
-*4 You must run Configure.pl with --cgoto=0, see RT#44291
 
 The following configurations are also working on x86/linux (and possibly
 other platforms):

Reply via email to