aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2010-08-04 13:51:32 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2010-08-04 13:51:32 +0200
commita48a91732b5252f6be1f0b3d54bfb1da52947caf (patch)
tree9ee4d951e1aaa29f3f08cdd47228251f110c2d47 /gcc/fortran/array.c
parent48176d810041c2d6a68ddd315044307044d00d07 (diff)
downloadgcc-a48a91732b5252f6be1f0b3d54bfb1da52947caf.zip
gcc-a48a91732b5252f6be1f0b3d54bfb1da52947caf.tar.gz
gcc-a48a91732b5252f6be1f0b3d54bfb1da52947caf.tar.bz2
re PR fortran/44857 (ICE in output_constructor_regular_field, at varasm.c:4996)
2010-08-04 Tobias Burnus <burnus@net-b.de> PR fortran/44857 * resolve.c (resolve_structure_cons): Fix handling of initialization structcture constructors with character elements of the wrong length. * array.c (gfc_check_iter_variable): Add NULL check. (gfc_resolve_character_array_constructor): Also truncate character length. 2010-08-04 Tobias Burnus <burnus@net-b.de> PR fortran/44857 * gfortran.dg/derived_constructor_char_1.f90: New. * gfortran.dg/derived_constructor_char_2.f90: New. From-SVN: r162863
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index e45f7e4..0d92e92 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -1207,7 +1207,7 @@ gfc_check_iter_variable (gfc_expr *expr)
sym = expr->symtree->n.sym;
- for (c = base; c; c = c->previous)
+ for (c = base; c && c->iterator; c = c->previous)
if (sym == c->iterator->var->symtree->n.sym)
return SUCCESS;
@@ -1829,7 +1829,7 @@ got_charlen:
has_ts = (expr->ts.u.cl && expr->ts.u.cl->length_from_typespec);
if (! cl
- || (current_length != -1 && current_length < found_length))
+ || (current_length != -1 && current_length != found_length))
gfc_set_constant_character_len (found_length, p->expr,
has_ts ? -1 : found_length);
}