public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Tobias Schlüter" <tobias.schlueter@physik.uni-muenchen.de>
To: Paul Brook <paul@codesourcery.com>
Cc: fortran@gcc.gnu.org, patch <gcc-patches@gcc.gnu.org>
Subject: Re: [gfortran] Fix PR 13201
Date: Fri, 09 Jul 2004 22:36:00 -0000	[thread overview]
Message-ID: <40EF0D5A.6050708@physik.uni-muenchen.de> (raw)
In-Reply-To: <200407092153.09047.paul@codesourcery.com>

Paul Brook wrote:
> 
> The standard calls variables whose size is not known at compile time 
> "automatic objects".  My suggested wording is:
> 
> "Parameter array '%s' at %L cannot be automatic or assumed shape"
> 

I changed the error message to that wording. I also changed the name of
the new function to 'gfc_is_compile_time_shape'. For reference, here's
what I committed after verifying that it still builds.

I'll add a testcase in a minute.

- Tobi

Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/ChangeLog,v
retrieving revision 1.104
diff -u -p -r1.104 ChangeLog
--- ChangeLog   9 Jul 2004 14:54:43 -0000       1.104
+++ ChangeLog   9 Jul 2004 21:18:54 -0000
@@ -1,4 +1,12 @@
 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_compile_time_shape): New function.
+       * gfortran.h (gfc_is_compile_time_shape): Add prototype.
+
+2004-07-09  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>

        PR fortran/15481
        PR fortran/13372
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 21:18:54 -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_compile_time_shape (gfc_array_spec *);

 /* interface.c -- FIXME: some of these should be in symbol.c */
 void gfc_free_interface (gfc_interface *);
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 21:19:06 -0000
@@ -1973,3 +1973,22 @@ gfc_find_array_ref (gfc_expr * e)

   return &ref->u.ar;
 }
+
+
+/* Find out if an array shape is known at compile time.  */
+
+int
+gfc_is_compile_time_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: 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 21:19:06 -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_compile_time_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 cannot be automatic "
+                "or assumed shape", sym->name, &sym->declared_at);
+         return;
     }

   /* Make sure that character string variables with assumed length are

  reply	other threads:[~2004-07-09 21:26 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-09 21:13 Tobias Schlüter
2004-07-09 21:30 ` Paul Brook
2004-07-09 22:36   ` Tobias Schlüter [this message]
  -- 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=40EF0D5A.6050708@physik.uni-muenchen.de \
    --to=tobias.schlueter@physik.uni-muenchen.de \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=paul@codesourcery.com \
    /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).