aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2006-11-09 22:49:12 +0000
committerPaul Thomas <pault@gcc.gnu.org>2006-11-09 22:49:12 +0000
commit012019922e6fed9b526e0c9cc34ec15250b73939 (patch)
treebed8c70b70d83314600842c219fac7804ddc3afa /gcc/fortran/trans-array.c
parent217b58895ef4c0fd9ca9e885a90c5a08c3634642 (diff)
downloadgcc-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.c12
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;