aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Moene <toon@gcc.gnu.org>2002-02-09 21:39:08 +0000
committerToon Moene <toon@gcc.gnu.org>2002-02-09 21:39:08 +0000
commit23b293843e50bb93065d802c2812f94776a36e84 (patch)
treec4a39c714426a54a4bda532f60d83a5392bc7ecb
parent749e7b80f6062f7b314310224f85191b54c32819 (diff)
downloadgcc-23b293843e50bb93065d802c2812f94776a36e84.zip
gcc-23b293843e50bb93065d802c2812f94776a36e84.tar.gz
gcc-23b293843e50bb93065d802c2812f94776a36e84.tar.bz2
data.c (ffedata_eval_offset_): Convert non-default integer constants to default integer kind if necessary.
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
-rw-r--r--gcc/f/ChangeLog5
-rw-r--r--gcc/f/data.c34
2 files changed, 35 insertions, 4 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index dfa656d5..c48a661 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -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.
diff --git a/gcc/f/data.c b/gcc/f/data.c
index 51eb2b7..08ffa74 100644
--- a/gcc/f/data.c
+++ b/gcc/f/data.c
@@ -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))