data.c (ffedata_eval_offset_): Convert non-default integer constants to default integ...
authorToon Moene <toon@gcc.gnu.org>
Sat, 9 Feb 2002 21:39:08 +0000 (21:39 +0000)
committerToon Moene <toon@gcc.gnu.org>
Sat, 9 Feb 2002 21:39:08 +0000 (21:39 +0000)
2002-02-09  Toon Moene  <toon@moene.indiv.nluug.nl>

* data.c (ffedata_eval_offset_): Convert non-default integer
constants to default integer kind if necessary.

From-SVN: r49646

gcc/f/ChangeLog
gcc/f/data.c

index dfa656d5bd4fad752b73271575747409816f8c41..c48a661af417642f46459c3f7be8632e98668f2c 100644 (file)
@@ -1,5 +1,10 @@
 2002-02-09  Toon Moene  <toon@moene.indiv.nluug.nl>
 
+       * data.c (ffedata_eval_offset_): Convert non-default integer
+       constants to default integer kind if necessary.
+
+2002-02-09  Toon Moene  <toon@moene.indiv.nlug.nl>
+
        * invoke.texi: Add a short debugging session
        as an example to the documentation of -g.
 
index 51eb2b7661b6ee5f71c547b11dca04f75c906dc4..08ffa74b5fd1e8ed70b06d2e451f43d2796f92d7 100644 (file)
@@ -1,5 +1,5 @@
 /* data.c -- Implementation File (module.c template V1.0)
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 2002 Free Software Foundation, Inc.
    Contributed by James Craig Burley.
 
 This file is part of GNU Fortran.
@@ -977,6 +977,8 @@ ffedata_eval_offset_ (ffebld subscripts, ffebld dims)
 
   while (subscripts != NULL)
     {
+      ffeinfoKindtype sub_kind, low_kind, hi_kind;
+
       ++rank;
       assert (dims != NULL);
 
@@ -984,7 +986,15 @@ ffedata_eval_offset_ (ffebld subscripts, ffebld dims)
       dim = ffebld_head (dims);
 
       assert (ffeinfo_basictype (ffebld_info (subscript)) == FFEINFO_basictypeINTEGER);
-      assert (ffeinfo_kindtype (ffebld_info (subscript)) == FFEINFO_kindtypeINTEGER1);
+      /* Force to default - it's a constant expression !  */
+      sub_kind = ffeinfo_kindtype (ffebld_info (subscript));
+      if (sub_kind == FFEINFO_kindtypeINTEGER2)
+       subscript->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) subscript->u.conter.expr->u.integer2;
+      else if (sub_kind == FFEINFO_kindtypeINTEGER3)
+       subscript->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) subscript->u.conter.expr->u.integer3;
+      else if (sub_kind == FFEINFO_kindtypeINTEGER4)
+       subscript->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) subscript->u.conter.expr->u.integer4;
+      ffeinfo_kindtype (ffebld_info (subscript)) = FFEINFO_kindtypeINTEGERDEFAULT;
       value = ffedata_eval_integer1_ (subscript);
 
       assert (ffebld_op (dim) == FFEBLD_opBOUNDS);
@@ -996,12 +1006,28 @@ ffedata_eval_offset_ (ffebld subscripts, ffebld dims)
       else
        {
          assert (ffeinfo_basictype (ffebld_info (low)) == FFEINFO_basictypeINTEGER);
-         assert (ffeinfo_kindtype (ffebld_info (low)) == FFEINFO_kindtypeINTEGERDEFAULT);
+         /* Force to default - it's a constant expression !  */
+         low_kind = ffeinfo_kindtype (ffebld_info (low));
+         if (low_kind == FFEINFO_kindtypeINTEGER2)
+           low->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) low->u.conter.expr->u.integer2;
+         else if (low_kind == FFEINFO_kindtypeINTEGER3)
+           low->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) low->u.conter.expr->u.integer3;
+         else if (low_kind == FFEINFO_kindtypeINTEGER4)
+           low->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) low->u.conter.expr->u.integer4;
+         ffeinfo_kindtype (ffebld_info (low)) = FFEINFO_kindtypeINTEGERDEFAULT;
          lowbound = ffedata_eval_integer1_ (low);
        }
 
       assert (ffeinfo_basictype (ffebld_info (high)) == FFEINFO_basictypeINTEGER);
-      assert (ffeinfo_kindtype (ffebld_info (high)) == FFEINFO_kindtypeINTEGERDEFAULT);
+      /* Force to default - it's a constant expression !  */
+      hi_kind = ffeinfo_kindtype (ffebld_info (high));
+      if (hi_kind == FFEINFO_kindtypeINTEGER2)
+       high->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) high->u.conter.expr->u.integer2;
+      else if (hi_kind == FFEINFO_kindtypeINTEGER3)
+       high->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) high->u.conter.expr->u.integer3;
+      else if (hi_kind == FFEINFO_kindtypeINTEGER4)
+       high->u.conter.expr->u.integer1 = (ffetargetIntegerDefault) high->u.conter.expr->u.integer4;
+      ffeinfo_kindtype (ffebld_info (high)) = FFEINFO_kindtypeINTEGERDEFAULT;
       highbound = ffedata_eval_integer1_ (high);
 
       if ((value < lowbound) || (value > highbound))