From: Paul Thomas Date: Sat, 23 Feb 2019 18:44:54 +0000 (+0000) Subject: backport: re PR fortran/88117 (ICE in gimplify_var_or_parm_decl, at gimplify.c:2697) X-Git-Tag: releases/gcc-7.5.0~574 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83fc627e0503cf0ab1383782c4aed91b842efb6f;p=thirdparty%2Fgcc.git backport: re PR fortran/88117 (ICE in gimplify_var_or_parm_decl, at gimplify.c:2697) 2019-02-23 Paul Thomas Backport from trunk PR fortran/88117 * resolve.c (deferred_op_assign): Return if the lhs expression has the pointer attribute. 2019-02-23 Paul Thomas Backport from trunk PR fortran/88117 * gfortran.dg/deferred_character_32.f90 : New test From-SVN: r269163 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 729d965350eb..0aef9299f7c7 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2019-02-23 Paul Thomas + + Backport from trunk + PR fortran/88117 + * resolve.c (deferred_op_assign): Return if the lhs expression + has the pointer attribute. + 2019-02-23 Thomas Koenig PR fortran/71066 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 60f3ea9d592a..1a3bedf23f21 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -10776,6 +10776,9 @@ deferred_op_assign (gfc_code **code, gfc_namespace *ns) if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1)) return false; + if (gfc_expr_attr ((*code)->expr1).pointer) + return false; + tmp_expr = get_temp_from_expr ((*code)->expr1, ns); tmp_expr->where = (*code)->loc; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9fe2ddb11f3b..42803d36e1e7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-02-23 Paul Thomas + + Backport from trunk + PR fortran/88117 + * gfortran.dg/deferred_character_32.f90 : New test + 2019-02-23 Thomas Koenig PR fortran/71066 diff --git a/gcc/testsuite/gfortran.dg/deferred_character_32.f90 b/gcc/testsuite/gfortran.dg/deferred_character_32.f90 new file mode 100644 index 000000000000..3969d97ffc9a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/deferred_character_32.f90 @@ -0,0 +1,13 @@ +! { dg-do run } +! +! Test the fix for PR88117. +! +! Contributed by Gerhard Steinmetz +! +program p + character(:), pointer :: z(:) + allocate (z, source = ['abcd', 'bcde']) + z = (z) ! gimplifier choked here. + if (any (z .ne. ['abcd', 'bcde'])) stop 1 + deallocate (z) +end