From 8e3dc7a3449a516cacb71735055eb12fcebf5b6f Mon Sep 17 00:00:00 2001 From: Richard Guenther <rguenther@suse.de> Date: Tue, 12 Dec 2006 12:13:48 +0000 Subject: [PATCH] re PR middle-end/30147 (ICE in fold_convert with -O2) 2006-12-12 Richard Guenther <rguenther@suse.de> PR middle-end/30147 * fold-const.c (fold_read_from_constant_string): Only fold read from constant string if the result type is integer. * gfortran.fortran-torture/compile/pr30147.f90: New testcase. From-SVN: r119776 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ .../gfortran.fortran-torture/compile/pr30147.f90 | 14 ++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.fortran-torture/compile/pr30147.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 406b52b5cc41..61f49fa745b2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-12-12 Richard Guenther <rguenther@suse.de> + + PR middle-end/30147 + * fold-const.c (fold_read_from_constant_string): Only fold read + from constant string if the result type is integer. + 2006-12-12 Olivier Hainque <hainque@adacore.com> * config/rs6000/t-vxworks: Remove assignment to LIB2FUNCS_EXTRA. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 0908e2840f2f..f1f9c0022618 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -12726,7 +12726,9 @@ fold_unary_to_constant (enum tree_code code, tree type, tree op0) tree fold_read_from_constant_string (tree exp) { - if (TREE_CODE (exp) == INDIRECT_REF || TREE_CODE (exp) == ARRAY_REF) + if ((TREE_CODE (exp) == INDIRECT_REF + || TREE_CODE (exp) == ARRAY_REF) + && TREE_CODE (TREE_TYPE (exp)) == INTEGER_TYPE) { tree exp1 = TREE_OPERAND (exp, 0); tree index; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2846aaf00110..8e8c438739ea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-12-12 Richard Guenther <rguenther@suse.de> + + PR middle-end/30147 + * gfortran.fortran-torture/compile/pr30147.f90: New testcase. + 2006-12-11 Aldy Hernandez <aldyh@redhat.com> Diego Novillo <dnovillo@redhat.com> diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr30147.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr30147.f90 new file mode 100644 index 000000000000..b9c1533d5d22 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr30147.f90 @@ -0,0 +1,14 @@ +MODULE input_cp2k_motion + IMPLICIT NONE + interface + SUBROUTINE keyword_create(variants) + CHARACTER(len=*), DIMENSION(:), & + INTENT(in) :: variants + end subroutine + end interface +CONTAINS + SUBROUTINE create_neb_section() + CALL keyword_create(variants=(/"K"/)) + END SUBROUTINE create_neb_section +END MODULE input_cp2k_motion + -- GitLab