diff options
author | Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2007-11-03 22:12:03 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2007-11-03 22:12:03 +0000 |
commit | 83dffdeb44589d502a1e21fc19380bc27e7dfc54 (patch) | |
tree | ae8c90b0319ebd7c47e711f7535fc641f08f902a /gcc | |
parent | 847c8ce4d147f2de0d99b517f7557f804e592867 (diff) | |
download | gcc-83dffdeb44589d502a1e21fc19380bc27e7dfc54.zip gcc-83dffdeb44589d502a1e21fc19380bc27e7dfc54.tar.gz gcc-83dffdeb44589d502a1e21fc19380bc27e7dfc54.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90 | 18 |
4 files changed, 31 insertions, 2 deletions
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 <fxcoudert@gcc.gnu.org> + 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 <fxcoudert@gcc.gnu.org> + * 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 <fxcoudert@gcc.gnu.org> + + PR fortran/33881 + * gfortran.dg/assumed_charlen_arg_1.f90: New test. + 2007-11-03 Manuel Lopez-Ibanez <manu@gcc.gnu.org> 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 |