re PR fortran/15976 (ICE: assertion failure in trans-array.c)
authorPaul Thomas <pault@gcc.gnu.org>
Fri, 11 Nov 2005 04:44:16 +0000 (04:44 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 11 Nov 2005 04:44:16 +0000 (04:44 +0000)
PR fortran/15976
* resolve.c (resolve_symbol): Disallow automatic arrays in module scope.
* gfortran.dg/automatic_module_variable.f90: New test.

Co-Authored-By: Steven G. Kargl <kargls@comcast.net>
From-SVN: r106777

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/automatic_module_variable.f90 [new file with mode: 0644]

index a138bb11ba84ce73a296690ebf464978699e6cce..305f91ad35e7deaaa04bae329535da9babcb1c78 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-10  Paul Thomas  <pault@gcc.gnu.org>
+           Steven G. Kargl <kargls@comcast.net>
+
+       PR fortran/15976
+       * resolve.c (resolve_symbol): Disallow automatic arrays in module scope.
+
 2005-11-10  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/24655
index 50d22b0ea839eb66c1f64c0995bfc6ee08e97b6a..0f175856a928268b465bfa2f65ee032fd13763bd 100644 (file)
@@ -4282,6 +4282,22 @@ resolve_symbol (gfc_symbol * sym)
          return;
     }
 
+  /* A module array's shape needs to be constant.  */
+
+  if (sym->ns->proc_name
+      && sym->attr.flavor == FL_VARIABLE
+      && sym->ns->proc_name->attr.flavor == FL_MODULE
+      && !sym->attr.use_assoc
+      && !sym->attr.allocatable
+      && !sym->attr.pointer
+      && sym->as != NULL
+      && !gfc_is_compile_time_shape (sym->as))
+    {
+      gfc_error ("Module 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
      dummy arguments.  */
 
@@ -4465,7 +4481,7 @@ resolve_symbol (gfc_symbol * sym)
   switch (sym->attr.flavor)
     {
     case FL_VARIABLE:
-      /* Can the sybol have an initializer?  */
+      /* Can the symbol have an initializer?  */
       flag = 0;
       if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
          || sym->attr.intrinsic || sym->attr.result)
index e2557a7991b545cd26bdf6d8d262c85c96931733..fa6d7b07e4ded8749d96a11e5674ed31f40f0da3 100644 (file)
@@ -1,3 +1,8 @@
+2005-11-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/15976
+       * gfortran.dg/automatic_module_variable.f90: New test.
+
 2005-11-11  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        PR target/24445
diff --git a/gcc/testsuite/gfortran.dg/automatic_module_variable.f90 b/gcc/testsuite/gfortran.dg/automatic_module_variable.f90
new file mode 100644 (file)
index 0000000..0cf43f7
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! Tests fix for PR15976
+!
+module sd
+  integer, parameter :: n = 20
+  integer :: i(n)
+  integer :: j(m) ! { dg-error "cannot be automatic or assumed shape" }
+  integer, pointer :: p(:)
+  integer, allocatable :: q(:)
+contains
+  function init (x, l)
+    integer :: x(l)
+    integer :: init(l)
+    init = x
+  end function init
+end module sd