Fortran - (large) arrays in the main shall be static
gcc/fortran/ChangeLog: PR fortran/102366 * trans-decl.c (gfc_finish_var_decl): Disable the warning message for variables moved from stack to static storange if they are declared in the main, but allow the move to happen. gcc/testsuite/ChangeLog: PR fortran/102366 * gfortran.dg/pr102366.f90: New test.
This commit is contained in:
parent
42eff613d0
commit
51166eb2c5
@ -743,7 +743,6 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym)
|
||||
|
||||
/* Keep variables larger than max-stack-var-size off stack. */
|
||||
if (!(sym->ns->proc_name && sym->ns->proc_name->attr.recursive)
|
||||
&& !(sym->ns->proc_name && sym->ns->proc_name->attr.is_main_program)
|
||||
&& !sym->attr.automatic
|
||||
&& sym->attr.save != SAVE_EXPLICIT
|
||||
&& sym->attr.save != SAVE_IMPLICIT
|
||||
@ -757,7 +756,9 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym)
|
||||
|| sym->attr.allocatable)
|
||||
&& !DECL_ARTIFICIAL (decl))
|
||||
{
|
||||
if (flag_max_stack_var_size > 0)
|
||||
if (flag_max_stack_var_size > 0
|
||||
&& !(sym->ns->proc_name
|
||||
&& sym->ns->proc_name->attr.is_main_program))
|
||||
gfc_warning (OPT_Wsurprising,
|
||||
"Array %qs at %L is larger than limit set by "
|
||||
"%<-fmax-stack-var-size=%>, moved from stack to static "
|
||||
|
9
gcc/testsuite/gfortran.dg/pr102366.f90
Normal file
9
gcc/testsuite/gfortran.dg/pr102366.f90
Normal file
@ -0,0 +1,9 @@
|
||||
! { dg-do compile }
|
||||
! { dg-options "-fdump-tree-original -Wall" }
|
||||
! { dg-final { scan-tree-dump-times "static real" 1 "original" } }
|
||||
! PR fortran/102366 - large arrays no longer become static
|
||||
|
||||
program p
|
||||
real(kind=4) :: a(16776325)
|
||||
a=1.0
|
||||
end
|
Loading…
Reference in New Issue
Block a user