From 86e033e21a4f61128173b4b1f4dedf07616068d7 Mon Sep 17 00:00:00 2001 From: Mikael Morin Date: Tue, 7 Sep 2010 16:04:55 +0000 Subject: [PATCH] re PR fortran/45564 (gfortran.dg/achar_4.f90 ICE: verify_gimple failed: type mismatch in comparison expression with -fbounds-check) 2010-09-07 Mikael Morin * trans-stmt.c (gfc_trans_character_select): Be conversion-safe while checking string length value. * trans-intrinsic.c (gfc_conv_intrinsic_char): Build integer using gfc_charlen_type_node type. PR fortran/45564 * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Convert string length to gfc_charlen_type_node. 2010-09-07 Mikael Morin * gfortran.dg/achar_4.f90: Enable bounds checking. From-SVN: r163958 --- gcc/fortran/ChangeLog | 11 +++++++++++ gcc/fortran/trans-intrinsic.c | 4 ++-- gcc/fortran/trans-stmt.c | 2 +- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/achar_4.f90 | 1 + 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 22810def8c2..99cc25111de 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,14 @@ +2010-09-07 Mikael Morin + + * trans-stmt.c (gfc_trans_character_select): Be conversion-safe while + checking string length value. + * trans-intrinsic.c (gfc_conv_intrinsic_char): Build integer using + gfc_charlen_type_node type. + + PR fortran/45564 + * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Convert string + length to gfc_charlen_type_node. + 2010-09-06 Thomas Koenig PR fortran/36931 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index c49908b76d3..c33b20ff509 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -1428,7 +1428,7 @@ gfc_conv_intrinsic_char (gfc_se * se, gfc_expr * expr) arg[0] = fold_build1_loc (input_location, NOP_EXPR, type, arg[0]); gfc_add_modify (&se->pre, var, arg[0]); se->expr = gfc_build_addr_expr (build_pointer_type (type), var); - se->string_length = integer_one_node; + se->string_length = build_int_cst (gfc_charlen_type_node, 1); } @@ -4709,7 +4709,7 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr) se->expr = info->descriptor; if (expr->ts.type == BT_CHARACTER) - se->string_length = dest_word_len; + se->string_length = fold_convert (gfc_charlen_type_node, dest_word_len); return; diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index dda38b6503e..caa9572db5e 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -1692,7 +1692,7 @@ gfc_trans_character_select (gfc_code *code) gfc_init_block (&body); /* Attempt to optimize length 1 selects. */ - if (expr1se.string_length == integer_one_node) + if (integer_onep (expr1se.string_length)) { for (d = cp; d; d = d->right) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2a4496dcece..289b6b818ea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-09-07 Mikael Morin + + * gfortran.dg/achar_4.f90: Enable bounds checking. + 2010-09-07 Uros Bizjak PR target/45206 diff --git a/gcc/testsuite/gfortran.dg/achar_4.f90 b/gcc/testsuite/gfortran.dg/achar_4.f90 index 3bbc2af5cb5..eb49db896d9 100644 --- a/gcc/testsuite/gfortran.dg/achar_4.f90 +++ b/gcc/testsuite/gfortran.dg/achar_4.f90 @@ -1,4 +1,5 @@ ! { dg-do run } +! { dg-options "-fbounds-check" } ! Tests the fix for PR31257, in which achar caused an ICE because it had no ! charlen. ! -- 2.30.2