diff options
author | Tobias Burnus <burnus@net-b.de> | 2010-08-04 13:51:32 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2010-08-04 13:51:32 +0200 |
commit | a48a91732b5252f6be1f0b3d54bfb1da52947caf (patch) | |
tree | 9ee4d951e1aaa29f3f08cdd47228251f110c2d47 /gcc/fortran/array.c | |
parent | 48176d810041c2d6a68ddd315044307044d00d07 (diff) | |
download | gcc-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.c | 4 |
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); } |