From 1422c2e4462c9b7c44aa035ac56af77565556181 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 11 May 2020 21:27:11 +0200 Subject: [PATCH] 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 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 PR fortran/95053 * gfortran.dg/pr95053.f: New test. --- 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(-) create mode 100644 gcc/testsuite/gfortran.dg/pr95053.f 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 + + 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 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 + + PR fortran/95053 + * gfortran.dg/pr95053.f: New test. + 2020-05-11 Uroš Bizjak 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 -- 2.30.2