From 83dffdeb44589d502a1e21fc19380bc27e7dfc54 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Sat, 3 Nov 2007 22:12:03 +0000 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans-array.c | 4 ++-- gcc/testsuite/ChangeLog | 5 +++++ .../gfortran.dg/assumed_charlen_arg_1.f90 | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4322dd44bad..42c726c48af 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 1c47b24e184..87ef815b297 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 4634c63bc86..89cbd133e1a 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 00000000000..4fc0efdeccd --- /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