diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2005-05-29 16:02:09 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2005-05-29 16:02:09 +0000 |
commit | 72caba17ea465d1cfb1a4982f531566dcac27232 (patch) | |
tree | 181048e11241d6f20cce0dd0367d8cf43e8fa30b /gcc/fortran/trans-array.c | |
parent | 0ac2a27ad751182f295a6baab384ca22c11e53b2 (diff) | |
download | gcc-72caba17ea465d1cfb1a4982f531566dcac27232.zip gcc-72caba17ea465d1cfb1a4982f531566dcac27232.tar.gz gcc-72caba17ea465d1cfb1a4982f531566dcac27232.tar.bz2 |
re PR fortran/16939 (Pointers not passed as subroutine arguments)
2005-05-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/16939
PR fortran/17192
PR fortran/17193
PR fortran/17202
PR fortran/18689
PR fortran/18890
PR fortran/21297
* fortran/trans-array.c (gfc_conv_resolve_dependencies): Add string
length to temp_ss for character pointer array assignments.
* fortran/trans-expr.c (gfc_conv_variable): Correct errors in
dereferencing of characters and character pointers.
* fortran/trans-expr.c (gfc_conv_function_call): Provide string
length as return argument for various kinds of handling of return.
Return a char[]* temporary for character pointer functions and
dereference the temporary upon return.
From-SVN: r100324
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r-- | gcc/fortran/trans-array.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 6dc33d3..047f8bc 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -2342,7 +2342,7 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, loop->temp_ss->type = GFC_SS_TEMP; loop->temp_ss->data.temp.type = gfc_get_element_type (TREE_TYPE (dest->data.info.descriptor)); - loop->temp_ss->string_length = NULL_TREE; + loop->temp_ss->string_length = dest->string_length; loop->temp_ss->data.temp.dimen = loop->dimen; loop->temp_ss->next = gfc_ss_terminator; gfc_add_ss_to_loop (loop, loop->temp_ss); @@ -3617,6 +3617,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss) loop.temp_ss->type = GFC_SS_TEMP; loop.temp_ss->next = gfc_ss_terminator; loop.temp_ss->data.temp.type = gfc_typenode_for_spec (&expr->ts); + /* ... which can hold our string, if present. */ if (expr->ts.type == BT_CHARACTER) se->string_length = loop.temp_ss->string_length |