diff options
author | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-09 22:49:12 +0000 |
---|---|---|
committer | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-09 22:49:12 +0000 |
commit | e2a3789bfec81eec91751bd367984c80d235eeb8 (patch) | |
tree | bed8c70b70d83314600842c219fac7804ddc3afa | |
parent | dc2942ef6cdd1a96457764d079425d01e5cd3f6c (diff) | |
download | gcc-e2a3789bfec81eec91751bd367984c80d235eeb8.tar.gz |
2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29431
* trans-array.c (get_array_ctor_strlen): If we fall through to
default, use a constant character length if it is available.
2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29431
* gfortran.dg/array_constructor_13.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118631 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/array_constructor_13.f90 | 24 |
4 files changed, 45 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7b5afcf36ee..76a31a6f93f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2006-11-09 Paul Thomas <pault@gcc.gnu.org> + PR fortran/29431 + * trans-array.c (get_array_ctor_strlen): If we fall through to + default, use a constant character length if it is available. + +2006-11-09 Paul Thomas <pault@gcc.gnu.org> + PR fortran/29744 * trans-types.c (gfc_get_derived_type): Ensure that the proc_name namespace is not the same as the owner namespace and diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 75f34198a0f..2a5b3b72e13 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -1416,7 +1416,7 @@ get_array_ctor_strlen (gfc_constructor * c, tree * len) case EXPR_ARRAY: if (!get_array_ctor_strlen (c->expr->value.constructor, len)) - is_const = FALSE; + is_const = false; break; case EXPR_VARIABLE: @@ -1425,7 +1425,15 @@ get_array_ctor_strlen (gfc_constructor * c, tree * len) break; default: - is_const = FALSE; + is_const = false; + + /* Hope that whatever we have possesses a constant character + length! */ + if (!(*len && INTEGER_CST_P (*len)) && c->expr->ts.cl) + { + gfc_conv_const_charlen (c->expr->ts.cl); + *len = c->expr->ts.cl->backend_decl; + } /* TODO: For now we just ignore anything we don't know how to handle, and hope we can figure it out a different way. */ break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d56bd042081..298fd305084 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2006-11-09 Paul Thomas <pault@gcc.gnu.org> + PR fortran/29431 + * gfortran.dg/array_constructor_13.f90: New test. + +2006-11-09 Paul Thomas <pault@gcc.gnu.org> + PR fortran/29744 * gfortran.dg/used_types_12.f90: New test. diff --git a/gcc/testsuite/gfortran.dg/array_constructor_13.f90 b/gcc/testsuite/gfortran.dg/array_constructor_13.f90 new file mode 100644 index 00000000000..bacc6fffc38 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/array_constructor_13.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! Tests patch for PR29431, which arose from PR29373. +! +! Contributed by Tobias Schlueter <tobi@gcc.gnu.org> +! + implicit none + CHARACTER(len=6), DIMENSION(2,2) :: a + +! Reporters original triggered another error: +! gfc_todo: Not Implemented: complex character array +! constructors. + + a = reshape([to_string(1.0), trim("abcdef"), & + to_string(7.0), trim("hijklm")], & + [2, 2]) + print *, a + + CONTAINS + FUNCTION to_string(x) + character*6 to_string + REAL, INTENT(in) :: x + WRITE(to_string, FMT="(F6.3)") x + END FUNCTION +end |