re PR fortran/15976 (ICE: assertion failure in trans-array.c)

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
This commit is contained in:
Paul Thomas 2005-11-11 04:44:16 +00:00 committed by Steven G. Kargl
parent f2d186905a
commit a5df14d4e5
4 changed files with 44 additions and 1 deletions

View 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

View 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)

View 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

View File

@ -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