From bae31807f512f87dafc7f9e20c990ee454e32ff6 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Sat, 14 Sep 2019 16:39:41 +0000 Subject: [PATCH] re PR fortran/91566 (ICE in gfc_constructor_copy, at fortran/constructor.c:103) 2019-09-14 Steven G. Kargl PR fortran/91566 * simplify.c (gfc_simplify_merge): Need to simplify expression after insertation of parenthesis. 2019-09-14 Steven G. Kargl PR fortran/91566 * gfortran.dg/pr91566.f90: New test. From-SVN: r275715 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/simplify.c | 8 ++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr91566.f90 | 14 ++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr91566.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 3ff20a25f6f7..d07ad3025c7e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-09-14 Steven G. Kargl + + PR fortran/91566 + * simplify.c (gfc_simplify_merge): Need to simplify expression + after insertation of parenthesis. + 2019-09-14 Steven G. Kargl PR fortran/91642 diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index ee159b19ee19..30924c1f049d 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -4808,8 +4808,12 @@ gfc_simplify_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask) gfc_constructor *tsource_ctor, *fsource_ctor, *mask_ctor; if (mask->expr_type == EXPR_CONSTANT) - return gfc_get_parentheses (gfc_copy_expr (mask->value.logical - ? tsource : fsource)); + { + result = gfc_copy_expr (mask->value.logical ? tsource : fsource); + result = gfc_get_parentheses (result); + gfc_simplify_expr (result, 1); + return result; + } if (!mask->rank || !is_constant_array_expr (mask) || !is_constant_array_expr (tsource) || !is_constant_array_expr (fsource)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f5d620a9ce0b..38a599068e93 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-14 Steven G. Kargl + + PR fortran/91566 + * gfortran.dg/pr91566.f90: New test. + 2019-09-14 Steven G. Kargl PR fortran/91642 diff --git a/gcc/testsuite/gfortran.dg/pr91566.f90 b/gcc/testsuite/gfortran.dg/pr91566.f90 new file mode 100644 index 000000000000..fdb35b44199b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91566.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! Code contributed by Gerhard Steinmetz +program p + call q + call r +end program p + +subroutine q + print *, -merge([3,4], 0, [.false.,.true.]) +end + +subroutine r + print *, 2 + merge([3,4], 0, [.false.,.true.]) +end -- 2.47.2