diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-11-09 22:49:12 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-11-09 22:49:12 +0000 |
commit | 012019922e6fed9b526e0c9cc34ec15250b73939 (patch) | |
tree | bed8c70b70d83314600842c219fac7804ddc3afa /gcc/fortran/trans-array.c | |
parent | 217b58895ef4c0fd9ca9e885a90c5a08c3634642 (diff) | |
download | gcc-012019922e6fed9b526e0c9cc34ec15250b73939.zip gcc-012019922e6fed9b526e0c9cc34ec15250b73939.tar.gz gcc-012019922e6fed9b526e0c9cc34ec15250b73939.tar.bz2 |
re PR fortran/29431 (Not Implemented: complex character array constructors)
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.
From-SVN: r118631
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r-- | gcc/fortran/trans-array.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 75f3419..2a5b3b7 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; |