[gcc/devel/gccgo] PR fortran/95053 - ICE in gfc_divide(): Bad basic type

Ian Lance Taylor ian@gcc.gnu.org
Sun Jul 12 18:07:41 GMT 2020


https://gcc.gnu.org/g:1422c2e4462c9b7c44aa035ac56af77565556181

commit 1422c2e4462c9b7c44aa035ac56af77565556181
Author: Harald Anlauf <anlauf@gmx.de>
Date:   Mon May 11 21:27:11 2020 +0200

    PR fortran/95053 - ICE in gfc_divide(): Bad basic type
    
            The fix for PR 93499 introduced a too strict check in gfc_divide
            that could trigger errors in the early parsing phase.  Relax the
            check and defer to a later stage.
    
    gcc/fortran/
    
    2020-05-11  Harald Anlauf  <anlauf@gmx.de>
    
            PR fortran/95053
            * arith.c (gfc_divide): Do not error out if operand 2 is
            non-numeric.  Defer checks to later stage.
    
    gcc/testsuite/
    
    2020-05-11  Harald Anlauf  <anlauf@gmx.de>
    
            PR fortran/95053
            * gfortran.dg/pr95053.f: New test.

Diff:
---
 gcc/fortran/ChangeLog               | 6 ++++++
 gcc/fortran/arith.c                 | 3 ++-
 gcc/testsuite/ChangeLog             | 5 +++++
 gcc/testsuite/gfortran.dg/pr95053.f | 7 +++++++
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a1a625abc1d..9f7b60e2ef9 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2020-05-11  Harald Anlauf  <anlauf@gmx.de>
+
+	PR fortran/95053
+	* arith.c (gfc_divide): Do not error out if operand 2 is
+	non-numeric.  Defer checks to later stage.
+
 2020-05-11  Tobias Burnus  <tobias@codesourcery.com>
 
 	PR fortran/94672
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c
index 1cd0867a941..dd72f44d377 100644
--- a/gcc/fortran/arith.c
+++ b/gcc/fortran/arith.c
@@ -1828,7 +1828,8 @@ gfc_divide (gfc_expr *op1, gfc_expr *op2)
 	    rc = ARITH_DIV0;
 	  break;
 	default:
-	  gfc_internal_error ("gfc_divide(): Bad basic type");
+	  /* basic type is non-numeric, handle this elsewhere.  */
+	  break;
 	}
       if (rc == ARITH_DIV0)
 	{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 158cf3857ba..99d06830cc1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-11  Harald Anlauf  <anlauf@gmx.de>
+
+	PR fortran/95053
+	* gfortran.dg/pr95053.f: New test.
+
 2020-05-11  Uroš Bizjak  <ubizjak@gmail.com>
 
 	PR target/95046
diff --git a/gcc/testsuite/gfortran.dg/pr95053.f b/gcc/testsuite/gfortran.dg/pr95053.f
new file mode 100644
index 00000000000..1d15c669467
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr95053.f
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/95053 - ICE in gfc_divide(): Bad basic type
+!
+ 123  FORMAT ('A'/'B')
+ 132  FORMAT (A/
+     +     ' B')
+      END


More information about the Gcc-cvs mailing list