diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-09-13 20:19:40 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-09-13 20:19:40 +0000 |
commit | 81e87db49d7919327d709c4b608990be7ab3b862 (patch) | |
tree | 0d53612a800f14f365f414313483f9e70d06d92b /gcc | |
parent | c28712beb41d67b0aa5cbd389ade768dcbd961da (diff) | |
download | gcc-81e87db49d7919327d709c4b608990be7ab3b862.zip gcc-81e87db49d7919327d709c4b608990be7ab3b862.tar.gz gcc-81e87db49d7919327d709c4b608990be7ab3b862.tar.bz2 |
re PR fortran/91566 (ICE in gfc_constructor_copy, at fortran/constructor.c:103)
2019-09-13 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91566
* simplify.c (gfc_simplify_merge): Need to simplify expression
after insertation of parenthesis.
2019-09-13 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91566
* gfortran.dg/pr91566.f90:
From-SVN: r275704
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/simplify.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr91566.f90 | 14 |
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a396418..6f2ba75 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-09-13 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91566 + * simplify.c (gfc_simplify_merge): Need to simplify expression + after insertation of parenthesis. + 2019-09-13 Bernd Edlinger <bernd.edlinger@hotmail.de> PR fortran/91716 diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 023eedb..3d2fc0d 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -4780,8 +4780,13 @@ 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); + /* Parenthesis is needed to get lower bounds of 1. */ + 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 62766c2..8bb7e7a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-13 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91566 + * gfortran.dg/pr91566.f90: + 2019-09-13 Bernd Edlinger <bernd.edlinger@hotmail.de> PR fortran/91716 diff --git a/gcc/testsuite/gfortran.dg/pr91566.f90 b/gcc/testsuite/gfortran.dg/pr91566.f90 new file mode 100644 index 0000000..fdb35b4 --- /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 |