From: Francois-Xavier Coudert Date: Sat, 3 Nov 2007 22:12:03 +0000 (+0000) Subject: re PR fortran/33881 (wrong code for assumed length character arrays) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83dffdeb44589d502a1e21fc19380bc27e7dfc54;p=platform%2Fupstream%2Fgcc.git re PR fortran/33881 (wrong code for assumed length character arrays) PR fortran/33881 * trans-array.c (gfc_conv_array_parameter): Evaluate se->string_length instead of the expr->ts.cl->backend_decl. * gfortran.dg/assumed_charlen_arg_1.f90: New test. From-SVN: r129874 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4322dd4..42c726c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2007-11-03 Francois-Xavier Coudert + PR fortran/33881 + * trans-array.c (gfc_conv_array_parameter): Evaluate + se->string_length instead of the expr->ts.cl->backend_decl. + +2007-11-03 Francois-Xavier Coudert + * gfortran.h: Shorten comment. * trans-types.c (gfc_get_function_type): Allow argument to have flavor FL_PROGRAM. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 1c47b24..87ef815 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -4972,8 +4972,8 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77) if (expr->expr_type == EXPR_ARRAY && expr->ts.type == BT_CHARACTER) { get_array_ctor_strlen (&se->pre, expr->value.constructor, &tmp); - expr->ts.cl->backend_decl = gfc_evaluate_now (tmp, &se->pre); - se->string_length = expr->ts.cl->backend_decl; + expr->ts.cl->backend_decl = tmp; + se->string_length = gfc_evaluate_now (tmp, &se->pre); } /* Is this the result of the enclosing procedure? */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4634c63..89cbd13 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-11-03 Francois-Xavier Coudert + + PR fortran/33881 + * gfortran.dg/assumed_charlen_arg_1.f90: New test. + 2007-11-03 Manuel Lopez-Ibanez PR c/29062 diff --git a/gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90 b/gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90 new file mode 100644 index 0000000..4fc0efd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90 @@ -0,0 +1,18 @@ +! { dg-do run } +! From PR 33881 + call create_watch_ss(" ") +contains + subroutine create_watch_actual(name) + character(len=1) :: name(1) + end subroutine create_watch_actual + + subroutine create_watch_ss(name,clock) + character(len=*) :: name + integer, optional :: clock + if (present(clock)) then + call create_watch_actual((/name/)) + else + call create_watch_actual((/name/)) + end if + end subroutine create_watch_ss +end