diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2012-02-12 15:22:34 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2012-02-12 15:22:34 +0000 |
commit | dec131b6add752c0d71cb6720de4ab154bf72411 (patch) | |
tree | fb0fa263d8f3e8b171badc6c2396f4e6ae613ff0 /gcc | |
parent | 3e4c98438ac27de89320fd253c3ea3d484b6a413 (diff) | |
download | gcc-dec131b6add752c0d71cb6720de4ab154bf72411.zip gcc-dec131b6add752c0d71cb6720de4ab154bf72411.tar.gz gcc-dec131b6add752c0d71cb6720de4ab154bf72411.tar.bz2 |
trans-array.c (gfc_walk_elemental_function_args, [...]): Move call to gfc_get_proc_ifc_for_expr out of gfc_walk_elemental_function_args.
* trans-array.c (gfc_walk_elemental_function_args,
gfc_walk_function_expr): Move call to gfc_get_proc_ifc_for_expr out
of gfc_walk_elemental_function_args.
* trans-stmt.c (gfc_trans_call): Ditto.
* trans-array.h (gfc_get_proc_ifc_for_expr): New prototype.
(gfc_walk_elemental_function_args): Update prototype.
From-SVN: r184141
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-array.h | 4 | ||||
-rw-r--r-- | gcc/fortran/trans-stmt.c | 3 |
4 files changed, 17 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6883032..19db403 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,14 @@ 2012-02-12 Mikael Morin <mikael@gcc.gnu.org> + * trans-array.c (gfc_walk_elemental_function_args, + gfc_walk_function_expr): Move call to gfc_get_proc_ifc_for_expr out + of gfc_walk_elemental_function_args. + * trans-stmt.c (gfc_trans_call): Ditto. + * trans-array.h (gfc_get_proc_ifc_for_expr): New prototype. + (gfc_walk_elemental_function_args): Update prototype. + +2012-02-12 Mikael Morin <mikael@gcc.gnu.org> + * trans-array.c (gfc_get_proc_ifc_for_expr): New function. (gfc_walk_elemental_function_args): Move code to gfc_get_proc_ifc_for_expr and call it. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index ac39fdf..bbe5afe 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -8463,9 +8463,8 @@ gfc_get_proc_ifc_for_expr (gfc_expr *procedure_ref) gfc_ss * gfc_walk_elemental_function_args (gfc_ss * ss, gfc_actual_arglist *arg, - gfc_expr *proc_expr, gfc_ss_type type) + gfc_symbol *proc_ifc, gfc_ss_type type) { - gfc_symbol *proc_ifc; gfc_formal_arglist *dummy_arg; int scalar; gfc_ss *head; @@ -8475,7 +8474,6 @@ gfc_walk_elemental_function_args (gfc_ss * ss, gfc_actual_arglist *arg, head = gfc_ss_terminator; tail = NULL; - proc_ifc = gfc_get_proc_ifc_for_expr (proc_expr); if (proc_ifc) dummy_arg = proc_ifc->formal; else @@ -8565,7 +8563,8 @@ gfc_walk_function_expr (gfc_ss * ss, gfc_expr * expr) by reference. */ if (sym->attr.elemental || (comp && comp->attr.elemental)) return gfc_walk_elemental_function_args (ss, expr->value.function.actual, - expr, GFC_SS_REFERENCE); + gfc_get_proc_ifc_for_expr (expr), + GFC_SS_REFERENCE); /* Scalar functions are OK as these are evaluated outside the scalarization loop. Pass back and let the caller deal with it. */ diff --git a/gcc/fortran/trans-array.h b/gcc/fortran/trans-array.h index 6ca630e..9bafb94 100644 --- a/gcc/fortran/trans-array.h +++ b/gcc/fortran/trans-array.h @@ -66,6 +66,8 @@ void gfc_trans_deferred_array (gfc_symbol *, gfc_wrapped_block *); /* Generate an initializer for a static pointer or allocatable array. */ void gfc_trans_static_array_pointer (gfc_symbol *); +/* Get the procedure interface for a function call. */ +gfc_symbol *gfc_get_proc_ifc_for_expr (gfc_expr *); /* Generate scalarization information for an expression. */ gfc_ss *gfc_walk_expr (gfc_expr *); /* Workhorse for gfc_walk_expr. */ @@ -74,7 +76,7 @@ gfc_ss *gfc_walk_subexpr (gfc_ss *, gfc_expr *); gfc_ss *gfc_walk_array_ref (gfc_ss *, gfc_expr *, gfc_ref * ref); /* Walk the arguments of an elemental function. */ gfc_ss *gfc_walk_elemental_function_args (gfc_ss *, gfc_actual_arglist *, - gfc_expr *, gfc_ss_type); + gfc_symbol *, gfc_ss_type); /* Walk an intrinsic function. */ gfc_ss *gfc_walk_intrinsic_function (gfc_ss *, gfc_expr *, gfc_intrinsic_sym *); diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index 7d094b0..bad0459 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -372,7 +372,8 @@ gfc_trans_call (gfc_code * code, bool dependency_check, ss = gfc_ss_terminator; if (code->resolved_sym->attr.elemental) ss = gfc_walk_elemental_function_args (ss, code->ext.actual, - code->expr1, GFC_SS_REFERENCE); + gfc_get_proc_ifc_for_expr (code->expr1), + GFC_SS_REFERENCE); /* Is not an elemental subroutine call with array valued arguments. */ if (ss == gfc_ss_terminator) |