From: Paul Thomas Date: Mon, 8 Oct 2018 09:11:03 +0000 (+0000) Subject: re PR fortran/86372 (Segfault on ASSOCIATE statement with CHARACTER variable) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c16ac98ea9cddb4725dd5c6d010bdeaac14d1a25;p=gcc.git re PR fortran/86372 (Segfault on ASSOCIATE statement with CHARACTER variable) 2018-10-08 Paul Thomas 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 PR fortran/86372 * gfortran.dg/associate_41.f90: New test. From-SVN: r264915 --- diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index ef9e519adc8..6256e3fa805 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -1885,7 +1885,6 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block) } 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) diff --git a/gcc/testsuite/gfortran.dg/associate_41.f90 b/gcc/testsuite/gfortran.dg/associate_41.f90 new file mode 100644 index 00000000000..9177582a5fc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_41.f90 @@ -0,0 +1,25 @@ +! { 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 +! +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