re PR fortran/51260 (PARAMETER array with constructor initializer: Compile-time simpl...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 9 Apr 2018 21:05:13 +0000 (21:05 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 9 Apr 2018 21:05:13 +0000 (21:05 +0000)
2018-04-09  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/51260
* resolve.c (resolve_variable): Simplify cases where access to a
parameter array results in a single constant.

2018-04-09  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/51260
* gfortran.dg/parameter_array_element_3.f90: New test.

From-SVN: r259256

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

index 1d90f4fa317fd67f97e0f06530b713d72f80c2f8..324fbf3f0bbf541ea2aa1ff2fa410d4a04ec9c45 100644 (file)
@@ -1,3 +1,9 @@
+2018-04-09  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/51260
+       * resolve.c (resolve_variable): Simplify cases where access to a
+       parameter array results in a single constant.
+
 2018-04-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/85102
index e28146a8bf46689d639c46616b0a40f426093012..18da9476a3caf902c9794072c328ee361c40aa7b 100644 (file)
@@ -5577,6 +5577,16 @@ resolve_procedure:
   if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
     add_caf_get_intrinsic (e);
 
+  /* Simplify cases where access to a parameter array results in a
+     single constant.  Suppress errors since those will have been
+     issued before, as warnings.  */
+  if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
+    {
+      gfc_push_suppress_errors ();
+      gfc_simplify_expr (e, 1);
+      gfc_pop_suppress_errors ();
+    }
+
   return t;
 }
 
index 21914dff5045e64d1d757519f6cedad0dd619279..d2fefd33de610ce308abe5700c2308a6b664f4c5 100644 (file)
@@ -1,3 +1,8 @@
+2018-04-09  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/51260
+       * gfortran.dg/parameter_array_element_3.f90: New test.
+
 2018-04-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/85194
diff --git a/gcc/testsuite/gfortran.dg/parameter_array_element_3.f90 b/gcc/testsuite/gfortran.dg/parameter_array_element_3.f90
new file mode 100644 (file)
index 0000000..ecab68a
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! PR 51260 - an unneeded parameter found its way into the
+! assembly code. Original test case by Tobias Burnus.
+module x
+contains
+  subroutine foo(i)
+    integer, intent(in) :: i
+  end subroutine foo
+end module x
+
+program main
+  use x
+  integer, parameter:: unneeded_parameter (10000)=(/(i,i=1,10000)/)
+  call foo(unneeded_parameter (1))
+  print *,unneeded_parameter (1)
+end program
+! { dg-final { scan-assembler-times "unneeded_parameter" 0 } }