]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* trans-array.c (gfc_walk_elemental_function_args,
authormikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 Feb 2012 15:22:34 +0000 (15:22 +0000)
committermikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 Feb 2012 15:22:34 +0000 (15:22 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184141 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/fortran/trans-array.h
gcc/fortran/trans-stmt.c

index 6883032022fcac6e7b3e99f6a317085224969168..19db403dbf9f4cd1a44323d356541f37f0652409 100644 (file)
@@ -1,3 +1,12 @@
+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.
index ac39fdf8a23898a56aa2fdfe6ea4c11d130fb080..bbe5afeebbf3891a0de586c3c44947f132647f91 100644 (file)
@@ -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.  */
index 6ca630e9ed91fa750c9c37ff4fd458d042dca966..9bafb9478d5ba2d42f905f2868becde8fef5269d 100644 (file)
@@ -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 *);
index 7d094b0311eeb55b260c372637c74ed6c74bd2dd..bad0459d3e1e4c6c47ee46fae909c5f7ff8491fa 100644 (file)
@@ -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)