From 2f4d1994d0aee81eb9b6234db264d89d2b7f911a Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 17 Jun 2009 12:53:01 +0000 Subject: [PATCH] * decl.c (build_struct): Rewrite loop over constructor elements. From-SVN: r148608 --- gcc/fortran/ChangeLog | 4 ++++ gcc/fortran/decl.c | 32 +++++++++++++++----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 12aa9dce0f5..39bc27f0520 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2009-06-16 Ian Lance Taylor + + * decl.c (build_struct): Rewrite loop over constructor elements. + 2009-06-16 Janus Weil PR fortran/36947 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 1a4ca3616dc..021392d427c 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1435,28 +1435,26 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, bool has_ts; gfc_constructor *ctor = c->initializer->value.constructor; - bool first = true; - int first_len; - has_ts = (c->initializer->ts.cl && c->initializer->ts.cl->length_from_typespec); - for (; ctor; ctor = ctor->next) + if (ctor) { - /* Remember the length of the first element for checking that - all elements *in the constructor* have the same length. This - need not be the length of the LHS! */ - if (first) - { - gcc_assert (ctor->expr->expr_type == EXPR_CONSTANT); - gcc_assert (ctor->expr->ts.type == BT_CHARACTER); - first_len = ctor->expr->value.character.length; - first = false; - } + int first_len; - if (ctor->expr->expr_type == EXPR_CONSTANT) - gfc_set_constant_character_len (len, ctor->expr, - has_ts ? -1 : first_len); + /* Remember the length of the first element for checking + that all elements *in the constructor* have the same + length. This need not be the length of the LHS! */ + gcc_assert (ctor->expr->expr_type == EXPR_CONSTANT); + gcc_assert (ctor->expr->ts.type == BT_CHARACTER); + first_len = ctor->expr->value.character.length; + + for (; ctor; ctor = ctor->next) + { + if (ctor->expr->expr_type == EXPR_CONSTANT) + gfc_set_constant_character_len (len, ctor->expr, + has_ts ? -1 : first_len); + } } } }