2018-10-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86372
* trans-stmt.c (trans_associate_var): Character associate names
with variable string length do not have to be deferred length
for the string length to be set, if variable.
2018-10-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86372
* gfortran.dg/associate_41.f90: New test.
From-SVN: r264915
}
if (sym->ts.type == BT_CHARACTER
- && sym->ts.deferred
&& !sym->attr.select_type_temporary
&& VAR_P (sym->ts.u.cl->backend_decl)
&& se.string_length != sym->ts.u.cl->backend_decl)
--- /dev/null
+! { dg-do run }
+!
+! Test the fix for PR86372 in which the associate name string length was
+! not being set, thereby causing a segfault.
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+!
+program xxx
+
+ character(len=50) :: s
+
+ s = repeat ('*', len(s))
+ call sub(s)
+ if (s .ne. '**'//'123'//repeat ('*', len(s) - 5)) stop 1
+
+contains
+
+ subroutine sub(str)
+ character(len=*), intent(inout) :: str
+ associate (substr => str(3:5))
+ substr = '123'
+ end associate
+ end subroutine
+
+end