Various Unicos 10.0.0.6 fixes.
Mark P Lutz [Fri, 14 Apr 2000 20:21:00 +0000 (20:21 +0000)]
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

hints/unicos.sh
pp.c
pp_ctl.c
t/op/64bitint.t

index 7ffd73f..ddbdee4 100644 (file)
@@ -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 (file)
--- 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
                    )
                {
index 4fcfb57..8c16af9 100644 (file)
--- 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);
index f59c953..6d33e8a 100644 (file)
@@ -1,5 +1,7 @@
 #./perl
 
+use integer;
+
 BEGIN {
        eval { my $q = pack "q", 0 };
        if ($@) {