]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/88117 (ICE in gimplify_var_or_parm_decl, at gimplify.c:2697)
authorPaul Thomas <pault@gcc.gnu.org>
Sat, 23 Feb 2019 18:44:54 +0000 (18:44 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sat, 23 Feb 2019 18:44:54 +0000 (18:44 +0000)
2019-02-23  Paul Thomas  <pault@gcc.gnu.org>

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  <pault@gcc.gnu.org>

Backport from trunk
PR fortran/88117
* gfortran.dg/deferred_character_32.f90 : New test

From-SVN: r269163

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

index 729d965350ebea249fb44f3d0b2fff6f2e06b18d..0aef9299f7c744507c88cf55a5316bfc264e22a1 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-23  Paul Thomas  <pault@gcc.gnu.org>
+
+       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  <tkoenig@gcc.gnu.org>
 
        PR fortran/71066
index 60f3ea9d592aeb25b1d583e0c7d7dce8e2da5fdc..1a3bedf23f2108538ac9fb5b8d1efcd6616a64e8 100644 (file)
@@ -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;
 
index 9fe2ddb11f3b61f0209ffca8a4a54a0e8c40e3cb..42803d36e1e72b3c059d30eb35347cb28e86f8c8 100644 (file)
@@ -1,3 +1,9 @@
+2019-02-23  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/88117
+       * gfortran.dg/deferred_character_32.f90 : New test
+
 2019-02-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        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 (file)
index 0000000..3969d97
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do run }
+!
+! Test the fix for PR88117.
+!
+! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+!
+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