PR fortran/98411 - Pointless warning for static variables
authorHarald Anlauf <anlauf@gmx.de>
Mon, 17 May 2021 19:35:38 +0000 (21:35 +0200)
committerHarald Anlauf <anlauf@gmx.de>
Mon, 17 May 2021 19:35:38 +0000 (21:35 +0200)
Variables with explicit SAVE attribute cannot end up on the stack.
There is no point in checking whether they should be moved off the
stack to static storage.

gcc/fortran/ChangeLog:

PR fortran/98411
* trans-decl.c (gfc_finish_var_decl): Add check for explicit SAVE
attribute.

gcc/testsuite/ChangeLog:

PR fortran/98411
* gfortran.dg/pr98411.f90: New test.

gcc/fortran/trans-decl.c
gcc/testsuite/gfortran.dg/pr98411.f90 [new file with mode: 0644]

index a170188..406b4ae 100644 (file)
@@ -738,6 +738,7 @@ 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->attr.automatic
+      && sym->attr.save != SAVE_EXPLICIT
       && INTEGER_CST_P (DECL_SIZE_UNIT (decl))
       && !gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl))
         /* Put variable length auto array pointers always into stack.  */
diff --git a/gcc/testsuite/gfortran.dg/pr98411.f90 b/gcc/testsuite/gfortran.dg/pr98411.f90
new file mode 100644 (file)
index 0000000..249afae
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! { dg-options "-Wall -fautomatic -fmax-stack-var-size=100" }
+! PR fortran/98411 - Pointless warning for static variables 
+
+module try
+  implicit none
+  integer, save :: a(1000)
+contains
+  subroutine initmodule
+    real, save :: b(1000)
+    logical    :: c(1000) ! { dg-warning "moved from stack to static storage" }
+    a(1) = 42
+    b(2) = 3.14
+    c(3) = .true.
+  end subroutine initmodule
+end module try