From c16ac98ea9cddb4725dd5c6d010bdeaac14d1a25 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Mon, 8 Oct 2018 09:11:03 +0000 Subject: [PATCH] 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 --- gcc/fortran/trans-stmt.c | 1 - gcc/testsuite/gfortran.dg/associate_41.f90 | 25 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/associate_41.f90 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 -- 2.30.2