aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>2016-12-10 18:35:47 +0000
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>2016-12-10 18:35:47 +0000
commit96dc118c535c430b7d565d544f89d806e5a7bf80 (patch)
tree10004e588a1942421170bde3fb035b34ef37cd0e /gcc/fortran/resolve.c
parentfbfc787444e42303f3a4950ba92b389d2f0e3f2a (diff)
2016-12-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/78350 * resolve.c (resolve_structure_cons): Remove the block that tried to remove a charlen and rely on namespace cleanup. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243517 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c27
1 files changed, 4 insertions, 23 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index d04b4318742..c7d872cb5b3 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1257,31 +1257,12 @@ resolve_structure_cons (gfc_expr *expr, int init)
gfc_constructor_append_expr (&cons->expr->value.constructor,
para, &cons->expr->where);
}
+
if (cons->expr->expr_type == EXPR_ARRAY)
{
- gfc_constructor *p;
- p = gfc_constructor_first (cons->expr->value.constructor);
- if (cons->expr->ts.u.cl != p->expr->ts.u.cl)
- {
- gfc_charlen *cl, *cl2;
-
- cl2 = NULL;
- for (cl = gfc_current_ns->cl_list; cl; cl = cl->next)
- {
- if (cl == cons->expr->ts.u.cl)
- break;
- cl2 = cl;
- }
-
- gcc_assert (cl);
-
- if (cl2)
- cl2->next = cl->next;
-
- gfc_free_expr (cl->length);
- free (cl);
- }
-
+ /* Rely on the cleanup of the namespace to deal correctly with
+ the old charlen. (There was a block here that attempted to
+ remove the charlen but broke the chain in so doing.) */
cons->expr->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
cons->expr->ts.u.cl->length_from_typespec = true;
cons->expr->ts.u.cl->length = gfc_copy_expr (comp->ts.u.cl->length);