re PR fortran/92017 (ICE in gfc_expr_attr, at fortran/primary.c:2674)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 13 Oct 2019 13:42:30 +0000 (13:42 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 13 Oct 2019 13:42:30 +0000 (13:42 +0000)
2019-10-13  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/92017
* expr.c (simplify_parameter_variable): Set the character length
of the result expression from the original expression if
necessary.

2019-10-13  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/92017
* gfortran.dg/minmaxloc_14.f90: New test.

From-SVN: r276938

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

index 82164d713aef7cb368e51b42a9b256d8a2b6ec0f..52f30dd58f5811192fdf901c15bf89a5e6e2190f 100644 (file)
@@ -1,3 +1,10 @@
+2019-10-13  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/92017
+       * expr.c (simplify_parameter_variable): Set the character length
+       of the result expression from the original expression if
+       necessary.
+
 2019-10-11  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/91649
index 9f638fe4dc32be8b4c6fdc4fc628109c9d828849..c508890d68dec78323e184876e31b7db92a1eda2 100644 (file)
@@ -2066,6 +2066,9 @@ simplify_parameter_variable (gfc_expr *p, int type)
 
   e->rank = p->rank;
 
+  if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL)
+    e->ts.u.cl = gfc_new_charlen (gfc_current_ns, p->ts.u.cl);
+
   /* Do not copy subobject refs for constant.  */
   if (e->expr_type != EXPR_CONSTANT && p->ref != NULL)
     e->ref = gfc_copy_ref (p->ref);
index 3117a07942c95536b4b7fd705d220d07f778eb7f..b914cb8fd42f47f3a9847bfe823c032bc0384045 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-13  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/92017
+       * gfortran.dg/minmaxloc_14.f90: New test.
+
 2019-10-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * lib/target-supports.exp (add_options_for_c99_runtime): Remove.
diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_14.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_14.f90
new file mode 100644 (file)
index 0000000..d24d03f
--- /dev/null
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! PR 92017 - this used to cause an ICE due do a missing charlen.
+! Original test case by Gerhard Steinmetz.
+
+program p
+  character(3), parameter :: a(4) = 'abc'
+  integer, parameter :: b(1) = minloc(a)
+  integer, parameter :: c = minloc(a, dim=1)
+  integer, parameter :: bb(1) = maxloc(a)
+  integer, parameter :: c2 = maxloc(a,dim=1)
+end program p