aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index dc65644..72b92a8 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -1529,7 +1529,14 @@ resolve_character_array_constructor (gfc_expr * expr)
max_length = -1;
- if (expr->ts.cl == NULL || expr->ts.cl->length == NULL)
+ if (expr->ts.cl == NULL)
+ {
+ expr->ts.cl = gfc_get_charlen ();
+ expr->ts.cl->next = gfc_current_ns->cl_list;
+ gfc_current_ns->cl_list = expr->ts.cl;
+ }
+
+ if (expr->ts.cl->length == NULL)
{
/* Find the maximum length of the elements. Do nothing for variable array
constructor. */
@@ -1542,8 +1549,6 @@ resolve_character_array_constructor (gfc_expr * expr)
if (max_length != -1)
{
/* Update the character length of the array constructor. */
- if (expr->ts.cl == NULL)
- expr->ts.cl = gfc_get_charlen ();
expr->ts.cl->length = gfc_int_expr (max_length);
/* Update the element constructors. */
for (p = expr->value.constructor; p; p = p->next)