]> gcc.gnu.org Git - gcc.git/commitdiff
Fortran: error recovery for bad deferred character length assignment [PR104314]
authorHarald Anlauf <anlauf@gmx.de>
Thu, 15 Sep 2022 20:06:53 +0000 (22:06 +0200)
committerHarald Anlauf <anlauf@gmx.de>
Thu, 15 Sep 2022 20:12:47 +0000 (22:12 +0200)
gcc/fortran/ChangeLog:

PR fortran/104314
* resolve.cc (deferred_op_assign): Do not try to generate temporary
for deferred character length assignment if types do not agree.

gcc/testsuite/ChangeLog:

PR fortran/104314
* gfortran.dg/pr104314.f90: New test.

Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
gcc/fortran/resolve.cc
gcc/testsuite/gfortran.dg/pr104314.f90 [new file with mode: 0644]

index ca114750f65b53650e9ee4329059224ec0a191a1..ae7ebb624e4584d574844af28c11b1aac521ee11 100644 (file)
@@ -11803,6 +11803,7 @@ deferred_op_assign (gfc_code **code, gfc_namespace *ns)
 
   if (!((*code)->expr1->ts.type == BT_CHARACTER
         && (*code)->expr1->ts.deferred && (*code)->expr1->rank
+        && (*code)->expr2->ts.type == BT_CHARACTER
         && (*code)->expr2->expr_type == EXPR_OP))
     return false;
 
diff --git a/gcc/testsuite/gfortran.dg/pr104314.f90 b/gcc/testsuite/gfortran.dg/pr104314.f90
new file mode 100644 (file)
index 0000000..510ded0
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! PR fortran/104314 - ICE in deferred_op_assign
+! Contributed by G.Steinmetz
+
+program p
+  character(:), allocatable :: c(:)
+  c = ['123']
+  c = c == c  ! { dg-error "Cannot convert" }
+end
This page took 0.101296 seconds and 5 git commands to generate.