From: Mark P Lutz Date: Fri, 14 Apr 2000 20:21:00 +0000 (+0000) Subject: Various Unicos 10.0.0.6 fixes. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8bda1795263a5b700b86a63303514e5d538dd644;p=p5sagit%2Fp5-mst-13.2.git Various Unicos 10.0.0.6 fixes. Subject: [ID 20000414.007] Test suite failures in perl 5.6 on Cray T90 Reply-To: tecmpl1@triton.ca.boeing.com To: perl5-porters@perl.org Message-Id: <200004142021.UAA36232@triton.ca.boeing.com> p4raw-id: //depot/cfgperl@5940 --- diff --git a/hints/unicos.sh b/hints/unicos.sh index 7ffd73f..ddbdee4 100644 --- a/hints/unicos.sh +++ b/hints/unicos.sh @@ -2,13 +2,16 @@ case `uname -r` in 6.1*) shellflags="-m+65536" ;; esac case "$optimize" in -'') optimize="-O1" ;; +'') optimize="-O1 -h nofastmd" ;; +esac +case `uname -r` in +10.*) pp_ctl_cflags='ccflags="$ccflags -DUNICOS_BROKEN_VOLATILE' ;; esac d_setregid='undef' d_setreuid='undef' case "$usemymalloc" in -'') # The perl malloc.c SHOULD work says Ilya. - # But for the time being (5.004_68), alas, it doesn't. +'') # The perl malloc.c SHOULD work in Unicos (ILP64) says Ilya. + # But for the time being (5.004_68), alas, it doesn't. --jhi # usemymalloc='y' # ccflags="$ccflags -DNO_RCHECK" usemymalloc='n' diff --git a/pp.c b/pp.c index a59664e..316c793 100644 --- a/pp.c +++ b/pp.c @@ -4743,10 +4743,14 @@ PP(pp_pack) DIE(aTHX_ "Cannot compress negative numbers"); if ( -#ifdef CXUX_BROKEN_CONSTANT_CONVERT - adouble <= UV_MAX_cxux +#if UVSIZE > 4 && UVSIZE >= NVSIZE + adouble <= 0xffffffff #else +# ifdef CXUX_BROKEN_CONSTANT_CONVERT + adouble <= UV_MAX_cxux +# else adouble <= UV_MAX +# endif #endif ) { diff --git a/pp_ctl.c b/pp_ctl.c index 4fcfb57..8c16af9 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -2561,14 +2561,26 @@ S_docatch_body(pTHX) return NULL; } +/* In Unicos 10.0.0.6 (T90) the cc seems to botch optimization so that + * if cursi is an auto variable inside S_docatch() cursi doesn't get + * properly saved/restored across longjmps. &/ +#ifdef UNICOS_BROKEN_VOLATILE +volatile PERL_SI *cursi; +#endif + STATIC OP * S_docatch(pTHX_ OP *o) { dTHR; int ret; OP *oldop = PL_op; +#ifdef UNICOS_BROKEN_VOLATILE + dJMPENV; + cursi = PL_curstackinfo; +#else volatile PERL_SI *cursi = PL_curstackinfo; dJMPENV; +#endif #ifdef DEBUGGING assert(CATCH_GET == TRUE); diff --git a/t/op/64bitint.t b/t/op/64bitint.t index f59c953..6d33e8a 100644 --- a/t/op/64bitint.t +++ b/t/op/64bitint.t @@ -1,5 +1,7 @@ #./perl +use integer; + BEGIN { eval { my $q = pack "q", 0 }; if ($@) {