diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2008-06-15 17:51:03 +0000 |
---|---|---|
committer | H.J. Lu <hongjiu.lu@intel.com> | 2008-06-15 17:51:03 +0000 |
commit | 2875fdf45b28d9d487a80df51854cb288f2a8c61 (patch) | |
tree | 255a026e396332a5b82736063f58cc379243ba34 /gcc/fortran/decl.c | |
parent | 538cec38b518593928cb9557e918f74597961608 (diff) |
Merged with trunk at revision 136811.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/stack@136812 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index c4ef7e7004d..a1c7d5aa44e 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -5820,10 +5820,27 @@ do_parm (void) && sym->ts.cl->length != NULL && sym->ts.cl->length->expr_type == EXPR_CONSTANT && init->expr_type == EXPR_CONSTANT - && init->ts.type == BT_CHARACTER - && init->ts.kind == 1) + && init->ts.type == BT_CHARACTER) gfc_set_constant_character_len ( mpz_get_si (sym->ts.cl->length->value.integer), init, false); + else if (sym->ts.type == BT_CHARACTER && sym->ts.cl != NULL + && sym->ts.cl->length == NULL) + { + int clen; + if (init->expr_type == EXPR_CONSTANT) + { + clen = init->value.character.length; + sym->ts.cl->length = gfc_int_expr (clen); + } + else if (init->expr_type == EXPR_ARRAY) + { + gfc_expr *p = init->value.constructor->expr; + clen = p->value.character.length; + sym->ts.cl->length = gfc_int_expr (clen); + } + else if (init->ts.cl && init->ts.cl->length) + sym->ts.cl->length = gfc_copy_expr (sym->value->ts.cl->length); + } sym->value = init; return MATCH_YES; |