diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-04 00:04:27 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-04 00:04:27 +0000 |
commit | fafcf9e64bf502ca628d43f1531e7c39352fb9d0 (patch) | |
tree | 1d0b5a5f72a77f5f5e42cc5384c58957b7098b71 /gcc/fortran/trans-expr.c | |
parent | 121c82c9ac5c8af04d480de4b2449fbdb5e2beae (diff) | |
download | gcc-fafcf9e64bf502ca628d43f1531e7c39352fb9d0.zip gcc-fafcf9e64bf502ca628d43f1531e7c39352fb9d0.tar.gz gcc-fafcf9e64bf502ca628d43f1531e7c39352fb9d0.tar.bz2 |
trans-expr.c (gfc_conv_procedure_call): Handle temporaries for arguments to elemental calls.
* trans-expr.c (gfc_conv_procedure_call): Handle temporaries for
arguments to elemental calls.
* trans-stmt.c (replace_ss): New function.
(gfc_conv_elemental_dependencies): Remove temporary loop handling.
Create a new ss for the temporary and replace the original one with it.
Remove fake array references. Recalculate all offsets.
From-SVN: r180906
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 4cfdc3e..cf9f0f7 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2997,8 +2997,19 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, { /* An elemental function inside a scalarized loop. */ gfc_init_se (&parmse, se); - gfc_conv_expr_reference (&parmse, e); parm_kind = ELEMENTAL; + + if (se->ss->dimen > 0 + && se->ss->info->data.array.ref == NULL) + { + gfc_conv_tmp_array_ref (&parmse); + if (e->ts.type == BT_CHARACTER) + gfc_conv_string_parameter (&parmse); + else + parmse.expr = gfc_build_addr_expr (NULL_TREE, parmse.expr); + } + else + gfc_conv_expr_reference (&parmse, e); } else { |