aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>2007-11-03 22:12:03 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2007-11-03 22:12:03 +0000
commit83dffdeb44589d502a1e21fc19380bc27e7dfc54 (patch)
treeae8c90b0319ebd7c47e711f7535fc641f08f902a /gcc
parent847c8ce4d147f2de0d99b517f7557f804e592867 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f9018
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