re PR fortran/30512 ([4.1 only] MAXVAL() incorrect for zero-size int arrays, and...
authorTobias Burnus <burnus@gcc.gnu.org>
Fri, 9 Feb 2007 21:56:06 +0000 (22:56 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Fri, 9 Feb 2007 21:56:06 +0000 (22:56 +0100)
fortran/
2007-02-09  Tobias Burnus  <burnus@net-b.de>

        PR fortran/30512
        * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc,
  gfc_conv_intrinsic_minmaxval): Use HUGE-1 for most negative integer.

testsuite/
2007-02-09  Tobias Burnus  <burnus@net-b.de>

        PR fortran/30512
        * gfortran.dg/maxlocval_1.f90: New test.

libgfortran/
2007-02-09  Thomas Koenig  <Thomas.Koenig@online.de>
    Tobias Burnus  <burnus@net-b.de>

        PR fortran/30512
        * m4/iparm.m4: Use HUGE-1 for most negative integer.
* generated/maxloc1_8_i4.c: Regenerate.
* generated/maxloc0_8_i8.c: Regenerate.
* generated/maxloc1_16_i4.c: Regenerate.
* generated/maxloc0_16_i8.c: Regenerate.
* generated/maxval_i4.c: Regenerate.
* generated/maxloc1_4_i8.c: Regenerate.
* generated/maxloc0_16_i16.c: Regenerate.
* generated/maxloc1_4_i16.c: Regenerate.
* generated/maxloc0_8_i16.c: Regenerate.
* generated/maxloc0_4_i4.c: Regenerate.
* generated/maxloc1_8_i8.c: Regenerate.
* generated/maxloc0_8_i4.c: Regenerate.
* generated/maxloc0_16_i4.c: Regenerate.
* generated/maxloc1_16_i8.c: Regenerate.
* generated/maxloc1_4_i4.c: Regenerate.
* generated/maxval_i8.c: Regenerate.
* generated/maxloc0_4_i16.c: Regenerate.
* generated/maxloc1_8_i16.c: Regenerate.
* generated/maxloc0_4_i8.c: Regenerate.
* generated/maxloc1_16_i16.c: Regenerate.
* generated/maxval_i16.c: Regenerate.

From-SVN: r121777

27 files changed:
gcc/fortran/ChangeLog
gcc/fortran/trans-intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/maxlocval_1.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/maxloc0_16_i16.c
libgfortran/generated/maxloc0_16_i4.c
libgfortran/generated/maxloc0_16_i8.c
libgfortran/generated/maxloc0_4_i16.c
libgfortran/generated/maxloc0_4_i4.c
libgfortran/generated/maxloc0_4_i8.c
libgfortran/generated/maxloc0_8_i16.c
libgfortran/generated/maxloc0_8_i4.c
libgfortran/generated/maxloc0_8_i8.c
libgfortran/generated/maxloc1_16_i16.c
libgfortran/generated/maxloc1_16_i4.c
libgfortran/generated/maxloc1_16_i8.c
libgfortran/generated/maxloc1_4_i16.c
libgfortran/generated/maxloc1_4_i4.c
libgfortran/generated/maxloc1_4_i8.c
libgfortran/generated/maxloc1_8_i16.c
libgfortran/generated/maxloc1_8_i4.c
libgfortran/generated/maxloc1_8_i8.c
libgfortran/generated/maxval_i16.c
libgfortran/generated/maxval_i4.c
libgfortran/generated/maxval_i8.c
libgfortran/m4/iparm.m4

index e501db6359befe0767e2200ee9e5da3cf4108d89..da3698537c3955f39cd7214ebf97e2cf831b000c 100644 (file)
@@ -1,3 +1,9 @@
+2007-02-09  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/30512
+       * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc,
+         gfc_conv_intrinsic_minmaxval): Use HUGE-1 for most negative integer.
+
 2007-02-09  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR fortran/30720
index 5ad0f3826cea2a7a0a5cd86ebd3f8ebf70684c81..1bce128d976c60b62babe72e6348c4117a906ed2 100644 (file)
@@ -1984,11 +1984,18 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, int op)
       gcc_unreachable ();
     }
 
-  /* Most negative(+HUGE) for maxval, most negative (-HUGE) for minval.  */
+  /* We start with the most negative possible value for MAXLOC, and the most
+     positive possible value for MINLOC. The most negative possible value is
+     -HUGE for BT_REAL and (-HUGE - 1) for BT_INTEGER; the most positive
+     possible value is HUGE in both cases. */
   if (op == GT_EXPR)
     tmp = fold_build1 (NEGATE_EXPR, TREE_TYPE (tmp), tmp);
   gfc_add_modify_expr (&se->pre, limit, tmp);
 
+  if (op == GT_EXPR && expr->ts.type == BT_INTEGER)
+    tmp = build2 (MINUS_EXPR, TREE_TYPE (tmp), tmp,
+                 build_int_cst (type, 1));
+
   /* Initialize the scalarizer.  */
   gfc_init_loopinfo (&loop);
   gfc_add_ss_to_loop (&loop, arrayss);
@@ -2143,9 +2150,17 @@ gfc_conv_intrinsic_minmaxval (gfc_se * se, gfc_expr * expr, int op)
       gcc_unreachable ();
     }
 
-  /* Most negative(-HUGE) for maxval, most positive (-HUGE) for minval.  */
+  /* We start with the most negative possible value for MAXVAL, and the most
+     positive possible value for MINVAL. The most negative possible value is
+     -HUGE for BT_REAL and (-HUGE - 1) for BT_INTEGER; the most positive
+     possible value is HUGE in both cases. */
   if (op == GT_EXPR)
     tmp = fold_build1 (NEGATE_EXPR, TREE_TYPE (tmp), tmp);
+
+  if (op == GT_EXPR && expr->ts.type == BT_INTEGER)
+    tmp = build2 (MINUS_EXPR, TREE_TYPE (tmp), tmp,
+                 build_int_cst (type, 1));
+
   gfc_add_modify_expr (&se->pre, limit, tmp);
 
   /* Walk the arguments.  */
index a485412836d849f9b46e64134d6e46c87e18fecb..433172ef08051e67823a83e7cad8db580b4d8b49 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-09  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/30512
+       * gfortran.dg/maxlocval_1.f90: New test.
+
 2007-02-09  Roger Sayle  <roger@eyesopen.com>
 
        * gcc.target/ia64/builtin_bswap-1.c: New test case.
diff --git a/gcc/testsuite/gfortran.dg/maxlocval_1.f90 b/gcc/testsuite/gfortran.dg/maxlocval_1.f90
new file mode 100644 (file)
index 0000000..11a92ca
--- /dev/null
@@ -0,0 +1,44 @@
+! { dg-do run }
+! Check that maxval uses for integers HUGE()-1.
+! PR fortran/30512
+
+program main
+implicit none
+integer(1) :: i1(3), a1(3:2)
+integer(2) :: i2(3), a2(3:2)
+integer(4) :: i4(3), a4(3:2)
+integer(8) :: i8(3), a8(3:2)
+
+integer(kind=4), allocatable :: a(:,:)
+integer(kind=8), allocatable :: b(:,:)
+
+logical :: msk(3)
+msk = .false.
+
+i1 = 1
+i2 = 1
+i4 = 1
+i8 = 1
+
+if(-huge(i1)-1_1 /= maxval(i1, msk)) call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+if(-huge(a1)-1_1 /= maxval(a1))      call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+
+if(-huge(i2)-1_2 /= maxval(i2, msk)) call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+if(-huge(a2)-1_2 /= maxval(a2))      call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+
+if(-huge(i4)-1_4 /= maxval(i4, msk)) call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+if(-huge(a4)-1_4 /= maxval(a4))      call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+
+if(-huge(i8)-1_4 /= maxval(i8, msk)) call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+if(-huge(a8)-1_4 /= maxval(a8))      call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+
+allocate (a(0:-1,1:1))
+allocate (b(0:-1,1:1))
+
+if(any(maxval(a,dim=1) /= -huge(a)-1_4)) call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+if(any(minval(a,dim=1) /=  huge(a)    )) call abort()
+
+if(any(maxval(b,dim=1) /= -huge(b)-1_8)) call abort() ! { dg-warning "outside symmetric range implied by Standard Fortran" }
+if(any(minval(b,dim=1) /=  huge(b)    )) call abort()
+
+end program main
index 428d49a4d377f5cd91bdde19575f3c1e332c465a..2b5c26f2436243b1d85504d491140c3b55374b37 100644 (file)
@@ -1,3 +1,30 @@
+2007-02-09  Thomas Koenig  <Thomas.Koenig@online.de>
+           Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/30512
+       * m4/iparm.m4: Use HUGE-1 for most negative integer.
+       * generated/maxloc1_8_i4.c: Regenerate.
+       * generated/maxloc0_8_i8.c: Regenerate.
+       * generated/maxloc1_16_i4.c: Regenerate.
+       * generated/maxloc0_16_i8.c: Regenerate.
+       * generated/maxval_i4.c: Regenerate.
+       * generated/maxloc1_4_i8.c: Regenerate.
+       * generated/maxloc0_16_i16.c: Regenerate.
+       * generated/maxloc1_4_i16.c: Regenerate.
+       * generated/maxloc0_8_i16.c: Regenerate.
+       * generated/maxloc0_4_i4.c: Regenerate.
+       * generated/maxloc1_8_i8.c: Regenerate.
+       * generated/maxloc0_8_i4.c: Regenerate.
+       * generated/maxloc0_16_i4.c: Regenerate.
+       * generated/maxloc1_16_i8.c: Regenerate.
+       * generated/maxloc1_4_i4.c: Regenerate.
+       * generated/maxval_i8.c: Regenerate.
+       * generated/maxloc0_4_i16.c: Regenerate.
+       * generated/maxloc1_8_i16.c: Regenerate.
+       * generated/maxloc0_4_i8.c: Regenerate.
+       * generated/maxloc1_16_i16.c: Regenerate.
+       * generated/maxval_i16.c: Regenerate.
+
 2007-02-04  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR fortran/30611
index 04ebbd4fdc182065c2d0b5db179c62f56da21aaf..82571c435e056bd1542f7bac6310fbce75e1aea2 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
 
   GFC_INTEGER_16 maxval;
 
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarray,
 
   GFC_INTEGER_16 maxval;
 
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
 
   while (base)
     {
index 4362fa889b50ed863fbc95c0e3a0538b24a2339c..fe46afbbb6753ebdd07f4bc54110fea2504a1db7 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
 
   GFC_INTEGER_4 maxval;
 
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarray,
 
   GFC_INTEGER_4 maxval;
 
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
 
   while (base)
     {
index aeb0aedcb296ff91a31031688386a5437abe5dc9..82ff74fa71e618703d44e632d23e013cdda05a8c 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
 
   GFC_INTEGER_8 maxval;
 
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarray,
 
   GFC_INTEGER_8 maxval;
 
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
 
   while (base)
     {
index 6d052911f44828a510613660c62744ab331e3c3c..1cbab8caf3215a7f0dca938ea6c4c00da7b28d35 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
 
   GFC_INTEGER_16 maxval;
 
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
 
   GFC_INTEGER_16 maxval;
 
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
 
   while (base)
     {
index 16ee31ede316b6a28fa24a581498b51de0a131ac..a1ba2ae29ca7c5039d06e5f45caa5d2d40d08edb 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
 
   GFC_INTEGER_4 maxval;
 
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
 
   GFC_INTEGER_4 maxval;
 
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
 
   while (base)
     {
index 58c6509d23d43549773967555ce65521e81a3193..82011f90e0f4ee8a2ccc57b0efe565b5347a9363 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
 
   GFC_INTEGER_8 maxval;
 
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
 
   GFC_INTEGER_8 maxval;
 
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
 
   while (base)
     {
index 4400a5b52f48fba4b193534f8e26e5dac498da1a..69b4015d136bf31e37dd60f6d91eb3266932f8d0 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
 
   GFC_INTEGER_16 maxval;
 
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
 
   GFC_INTEGER_16 maxval;
 
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
 
   while (base)
     {
index 0d96ff3636d7c38072f4d16aca05d8bf8c3fb213..b6ccff6a096463fc4cd0459a10ee7ffa0317ff28 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
 
   GFC_INTEGER_4 maxval;
 
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
 
   GFC_INTEGER_4 maxval;
 
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
 
   while (base)
     {
index e7499568d4bdb9fbe8fa64259e84369fac0fb8f2..5ab944c25e901060ce97fb8f642be606d29d6a17 100644 (file)
@@ -103,7 +103,7 @@ maxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
 
   GFC_INTEGER_8 maxval;
 
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
 
   while (base)
     {
@@ -227,7 +227,7 @@ mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
 
   GFC_INTEGER_8 maxval;
 
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
 
   while (base)
     {
index c01a006f8eadfdd116cb74d8d3fbe0145c5f74fa..14db8ddd859b15333ee5caeab7d35f747819da74 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_16 maxval;
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_16 maxval;
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index dd0739c5915c51669cb1ebb1ae6a6f8987b0d816..63b6f463f2fe5bf924aa888bfe213b26b422081a 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index c18a8e5a7915e8458d7429059d92d3bc266cf518..3b6a6ef1492334c4b447d9a911a70c51c3b25b0e 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_8 maxval;
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray,
       {
 
   GFC_INTEGER_8 maxval;
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index 0c8a0cc33c6f20a7a53a39f07ff046d10bf56b44..0848c44fdca60cd065d95305154074f28af99770 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
       {
 
   GFC_INTEGER_16 maxval;
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
       {
 
   GFC_INTEGER_16 maxval;
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index 83131ffd33b565a93287ca96afb7bd9ffdefd727..15f1243babf4bf06c9b6b8678a2ba09535c85cf3 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index bb553eb884ebd3ac7945ce34b21b0fbca8bc71e5..2a2f37ca4d0dca9470c1d97f936c873cc9591bf7 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
       {
 
   GFC_INTEGER_8 maxval;
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
       {
 
   GFC_INTEGER_8 maxval;
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index d4bff32de4ead72d09c8bd321f82e151b40134a0..17c73ce295501d40cdeae02f7abd4cf86ed24213 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
       {
 
   GFC_INTEGER_16 maxval;
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
       {
 
   GFC_INTEGER_16 maxval;
-  maxval = -GFC_INTEGER_16_HUGE;
+  maxval = (-GFC_INTEGER_16_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index 9225f13c7911656ce3092232c832ad5e21ae499e..a4f36452b633e735f9f8e63ca6f8f0b5042c3bf0 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
       {
 
   GFC_INTEGER_4 maxval;
-  maxval = -GFC_INTEGER_4_HUGE;
+  maxval = (-GFC_INTEGER_4_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index c0179cd8b7a677ee777e6decf0f1e0d201f0ffc5..587ddc657f92a24e357ace94af7614e558c2ff1d 100644 (file)
@@ -140,7 +140,7 @@ maxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
       {
 
   GFC_INTEGER_8 maxval;
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
@@ -315,7 +315,7 @@ mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
       {
 
   GFC_INTEGER_8 maxval;
-  maxval = -GFC_INTEGER_8_HUGE;
+  maxval = (-GFC_INTEGER_8_HUGE-1);
   result = 0;
         if (len <= 0)
          *dest = 0;
index 8bdab56d54d8f964c3fdd4aeb32174866d284bbe..f5df1e1b394a7982f6ecf7407308d6f9128eb162 100644 (file)
@@ -138,9 +138,9 @@ maxval_i16 (gfc_array_i16 * const restrict retarray,
       src = base;
       {
 
-  result = -GFC_INTEGER_16_HUGE;
+  result = (-GFC_INTEGER_16_HUGE-1);
         if (len <= 0)
-         *dest = -GFC_INTEGER_16_HUGE;
+         *dest = (-GFC_INTEGER_16_HUGE-1);
        else
          {
            for (n = 0; n < len; n++, src += delta)
@@ -308,9 +308,9 @@ mmaxval_i16 (gfc_array_i16 * const restrict retarray,
       msrc = mbase;
       {
 
-  result = -GFC_INTEGER_16_HUGE;
+  result = (-GFC_INTEGER_16_HUGE-1);
         if (len <= 0)
-         *dest = -GFC_INTEGER_16_HUGE;
+         *dest = (-GFC_INTEGER_16_HUGE-1);
        else
          {
            for (n = 0; n < len; n++, src += delta, msrc += mdelta)
@@ -404,7 +404,7 @@ smaxval_i16 (gfc_array_i16 * const restrict retarray,
     dest = retarray->data;
 
     for (n = 0; n < rank; n++)
-      dest[n * dstride] = -GFC_INTEGER_16_HUGE ;
+      dest[n * dstride] = (-GFC_INTEGER_16_HUGE-1) ;
 }
 
 #endif
index ba5b31068417969020f4a4b590298044d4d3f82a..7b01617edd1b4864429d5fa147620f3d9e477ad3 100644 (file)
@@ -138,9 +138,9 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
       src = base;
       {
 
-  result = -GFC_INTEGER_4_HUGE;
+  result = (-GFC_INTEGER_4_HUGE-1);
         if (len <= 0)
-         *dest = -GFC_INTEGER_4_HUGE;
+         *dest = (-GFC_INTEGER_4_HUGE-1);
        else
          {
            for (n = 0; n < len; n++, src += delta)
@@ -308,9 +308,9 @@ mmaxval_i4 (gfc_array_i4 * const restrict retarray,
       msrc = mbase;
       {
 
-  result = -GFC_INTEGER_4_HUGE;
+  result = (-GFC_INTEGER_4_HUGE-1);
         if (len <= 0)
-         *dest = -GFC_INTEGER_4_HUGE;
+         *dest = (-GFC_INTEGER_4_HUGE-1);
        else
          {
            for (n = 0; n < len; n++, src += delta, msrc += mdelta)
@@ -404,7 +404,7 @@ smaxval_i4 (gfc_array_i4 * const restrict retarray,
     dest = retarray->data;
 
     for (n = 0; n < rank; n++)
-      dest[n * dstride] = -GFC_INTEGER_4_HUGE ;
+      dest[n * dstride] = (-GFC_INTEGER_4_HUGE-1) ;
 }
 
 #endif
index ee6a5d2d87c48e23f6837ddf2afd4f004932522c..cb83c5a1e6aa3eca4bbcd2a3201ed4df2faddbbf 100644 (file)
@@ -138,9 +138,9 @@ maxval_i8 (gfc_array_i8 * const restrict retarray,
       src = base;
       {
 
-  result = -GFC_INTEGER_8_HUGE;
+  result = (-GFC_INTEGER_8_HUGE-1);
         if (len <= 0)
-         *dest = -GFC_INTEGER_8_HUGE;
+         *dest = (-GFC_INTEGER_8_HUGE-1);
        else
          {
            for (n = 0; n < len; n++, src += delta)
@@ -308,9 +308,9 @@ mmaxval_i8 (gfc_array_i8 * const restrict retarray,
       msrc = mbase;
       {
 
-  result = -GFC_INTEGER_8_HUGE;
+  result = (-GFC_INTEGER_8_HUGE-1);
         if (len <= 0)
-         *dest = -GFC_INTEGER_8_HUGE;
+         *dest = (-GFC_INTEGER_8_HUGE-1);
        else
          {
            for (n = 0; n < len; n++, src += delta, msrc += mdelta)
@@ -404,7 +404,7 @@ smaxval_i8 (gfc_array_i8 * const restrict retarray,
     dest = retarray->data;
 
     for (n = 0; n < rank; n++)
-      dest[n * dstride] = -GFC_INTEGER_8_HUGE ;
+      dest[n * dstride] = (-GFC_INTEGER_8_HUGE-1) ;
 }
 
 #endif
index 950962113b05555a53552baa2eeb719c03acc8fa..acd3d2ce604bbaf3f0b2acd38dfa8a87914ed8d2 100644 (file)
@@ -28,6 +28,6 @@ define_type(rtype, rtype_tmp)dnl
 define(rtype_qual,`_'rtype_kind)dnl
 ')dnl
 define(atype_max, atype_name`_HUGE')dnl
-define(atype_min, `-'atype_max)dnl
+define(atype_min,ifelse(regexp(file, `_\(.\)[0-9]*\.c$', `\1'),`i',`(-'atype_max`-1)',`-'atype_max))dnl
 define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl
 define(rtype_ccode,ifelse(rtype_letter,`i',rtype_kind,rtype_code))dnl