diff options
author | Toon Moene <toon@gcc.gnu.org> | 2002-02-09 21:39:08 +0000 |
---|---|---|
committer | Toon Moene <toon@gcc.gnu.org> | 2002-02-09 21:39:08 +0000 |
commit | 23b293843e50bb93065d802c2812f94776a36e84 (patch) | |
tree | c4a39c714426a54a4bda532f60d83a5392bc7ecb | |
parent | 749e7b80f6062f7b314310224f85191b54c32819 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/f/data.c | 34 |
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)) |