From: "Tobias Schlüter" <tobias.schlueter@physik.uni-muenchen.de>
To: patch <gcc-patches@gcc.gnu.org>,
GCC Fortran mailing list <fortran@gcc.gnu.org>
Subject: [gfortran] Fix PR 13201
Date: Fri, 09 Jul 2004 21:13:00 -0000 [thread overview]
Message-ID: <40EF0064.90805@physik.uni-muenchen.de> (raw)
My previous fixlet for PR 13201 didn't catch the general case of a
parameter array not having a constant shape. This followup patch fixes
that omission.
Looking the patch over, I think a better name than 'constant shape' is
probably called for. I'm open to suggestions how to concisely say
'explicit shape, determined at compile time by means of constants'. I
will definitely enhance the comment in array.c.
Built and tested on i686-pc-linux.
- Tobi
2004-07-09 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/13201
* resolve.c (resolve_symbol): Verify that the shape of a
parameter array is not only explicit, but also constant.
* array.c (gfc_is_constant_shape): New function.
* gfortran.h (gfc_is_constant_shape): Add prototype.
Index: resolve.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/resolve.c,v
retrieving revision 1.9
diff -u -p -r1.9 resolve.c
--- resolve.c 9 Jul 2004 14:53:39 -0000 1.9
+++ resolve.c 9 Jul 2004 20:23:42 -0000
@@ -3745,12 +3745,14 @@ resolve_symbol (gfc_symbol * sym)
return;
}
- if (sym->attr.flavor == FL_PARAMETER
- && sym->as != NULL && sym->as->type != AS_EXPLICIT)
+ /* A parameter array's shape needs to be constant. */
+
+ if (sym->attr.flavor == FL_PARAMETER && sym->as != NULL
+ && !gfc_is_constant_shape (sym->as))
{
- gfc_error ("Parameter array '%s' at %L must have an explicit shape",
- sym->name, &sym->declared_at);
- return;
+ gfc_error ("Parameter array '%s' at %L must have an explicit, "
+ "constant shape", sym->name, &sym->declared_at);
+ return;
}
/* Make sure that character string variables with assumed length are
Index: array.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/array.c,v
retrieving revision 1.5
diff -u -p -r1.5 array.c
--- array.c 21 Jun 2004 17:16:25 -0000 1.5
+++ array.c 9 Jul 2004 20:23:42 -0000
@@ -1973,3 +1973,22 @@ gfc_find_array_ref (gfc_expr * e)
return &ref->u.ar;
}
+
+
+/* Find out if an array shape is constant. */
+
+int
+gfc_is_constant_shape (gfc_array_spec *as)
+{
+ int i;
+
+ if (as->type != AS_EXPLICIT)
+ return 0;
+
+ for (i = 0; i < as->rank; i++)
+ if (!gfc_is_constant_expr (as->lower[i])
+ || !gfc_is_constant_expr (as->upper[i]))
+ return 0;
+
+ return 1;
+}
Index: gfortran.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/gfortran.h,v
retrieving revision 1.17
diff -u -p -r1.17 gfortran.h
--- gfortran.h 4 Jul 2004 17:00:11 -0000 1.17
+++ gfortran.h 9 Jul 2004 20:23:42 -0000
@@ -1645,6 +1645,7 @@ void gfc_insert_constructor (gfc_expr *,
gfc_constructor *gfc_get_constructor (void);
tree gfc_conv_array_initializer (tree type, gfc_expr * expr);
try spec_size (gfc_array_spec *, mpz_t *);
+int gfc_is_constant_shape (gfc_array_spec *);
/* interface.c -- FIXME: some of these should be in symbol.c */
void gfc_free_interface (gfc_interface *);
next reply other threads:[~2004-07-09 20:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-09 21:13 Tobias Schlüter [this message]
2004-07-09 21:30 ` Paul Brook
2004-07-09 22:36 ` Tobias Schlüter
-- strict thread matches above, loose matches on Subject: below --
2004-05-31 22:50 Tobias Schlüter
2004-06-08 23:54 ` Paul Brook
2004-06-09 14:00 ` Tobias Schlüter
2004-06-09 16:43 ` Jonathan Lennox
2004-06-09 16:57 ` Joseph S. Myers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=40EF0064.90805@physik.uni-muenchen.de \
--to=tobias.schlueter@physik.uni-muenchen.de \
--cc=fortran@gcc.gnu.org \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).