[Bug fortran/104314] ICE in deferred_op_assign, at fortran/resolve.cc:11794

2022-09-15 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104314

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|NEW |RESOLVED

--- Comment #5 from anlauf at gcc dot gnu.org ---
Fixed on mainline.  Closing.

Thanks for the report!

[Bug fortran/104314] ICE in deferred_op_assign, at fortran/resolve.cc:11794

2022-09-15 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104314

--- Comment #4 from CVS Commits  ---
The master branch has been updated by Harald Anlauf :

https://gcc.gnu.org/g:7bd4deb2a7c1394550610ab27507d1ed2af817c2

commit r13-2690-g7bd4deb2a7c1394550610ab27507d1ed2af817c2
Author: Harald Anlauf 
Date:   Thu Sep 15 22:06:53 2022 +0200

Fortran: error recovery for bad deferred character length assignment
[PR104314]

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 

[Bug fortran/104314] ICE in deferred_op_assign, at fortran/resolve.cc:11794

2022-09-05 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104314

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 CC||anlauf at gcc dot gnu.org

--- Comment #3 from anlauf at gcc dot gnu.org ---
(In reply to kargl from comment #1)
> Untested patch.

Yes, that works.  Even shorter:

diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index ca114750f65..3834f9a3f06 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -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;

[Bug fortran/104314] ICE in deferred_op_assign, at fortran/resolve.cc:11794

2022-01-31 Thread sgk at troutmask dot apl.washington.edu via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104314

--- Comment #2 from Steve Kargl  ---
On Mon, Jan 31, 2022 at 08:14:39PM +, kargl at gcc dot gnu.org wrote:
> 
> --- Comment #1 from kargl at gcc dot gnu.org ---
> Untested patch.
> 

Seems to pass regression testing.

[Bug fortran/104314] ICE in deferred_op_assign, at fortran/resolve.cc:11794

2022-01-31 Thread kargl at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104314

kargl at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 CC||kargl at gcc dot gnu.org
   Priority|P3  |P4
 Ever confirmed|0   |1
   Last reconfirmed||2022-01-31

--- Comment #1 from kargl at gcc dot gnu.org ---
Untested patch.

diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 835a4783718..d18404da09d 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -11784,6 +11784,9 @@ deferred_op_assign (gfc_code **code, gfc_namespace *ns)
   if (gfc_expr_attr ((*code)->expr1).pointer)
 return false;

+  if ((*code)->expr1->ts.type != (*code)->expr2->ts.type)
+return false;
+
   tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
   tmp_expr->where = (*code)->loc;