changeset 76:6381ea127240

call argument iterator fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 20 Sep 2011 16:58:47 +0900
parents 3c5ea37d9068
children 65b2ea5f1266
files gcc/c-parser.c gcc/cbc-tree.h gcc/tree.h
diffstat 3 files changed, 19 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/gcc/c-parser.c	Mon Aug 22 04:01:01 2011 +0900
+++ b/gcc/c-parser.c	Tue Sep 20 16:58:47 2011 +0900
@@ -4356,16 +4356,16 @@
     fields = chainon (field, fields);
     field = build_decl (FIELD_DECL, get_identifier("argsp"), ptr_type_node);
     fields = chainon (field, fields);
-    //field = build_decl (FIELD_DECL, get_identifier("retval"), intSI_type_node);
-    //fields = chainon (field, fields);
+    /* field = build_decl (FIELD_DECL, get_identifier("retval"), intSI_type_node); */
+    /* fields = chainon (field, fields); */
     fields = nreverse(fields);
     finish_struct (env_struct_type, fields, NULL_TREE);
 
     env_struct = build_c_cast (build_pointer_type(env_struct_type), env.value);
-    //build_component_ref (cbc_env, get_identifier("argsp"));
+    /* build_component_ref (cbc_env, get_identifier("argsp")); */
     ebp = build_component_ref (build_indirect_ref (loc,env_struct, "CbCenv->sp"), get_identifier("sp"));
     argsp = build_component_ref (build_indirect_ref (loc, env_struct, "CbCenv->sp"), get_identifier("argsp"));
-    //ebp = chainon (ebp, argsp);
+    /* ebp = chainon (ebp, argsp); */
     tmp = build_tree_list (ebp, argsp);
 
     return tmp;
@@ -4375,10 +4375,11 @@
 static tree
 cbc_replace_arguments (location_t loc, tree call)
 {
-  tree args;
+  tree arg;
   tree fn;
   tree tmp_decl;
   int i=0;
+  call_expr_arg_iterator iter;
 
   fn = CALL_EXPR_FN (call);
   if ( TREE_CODE (fn)==PARM_DECL || !TREE_CONSTANT (fn) )
@@ -4390,20 +4391,18 @@
       CALL_EXPR_FN (call) = tmp_decl;
     }
 
-  args = CALL_EXPR_ARGS (call);
-  for ( ;args; args = TREE_CHAIN (args), i++)
-    {
-      tree arg = TREE_VALUE (args);
-
-      //if ( !CONSTANT_CLASS_P (arg) && !VAR_OR_FUNCTION_DECL_P (arg) )
+  FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 
+    {
+      /* if ( !CONSTANT_CLASS_P (arg) && !VAR_OR_FUNCTION_DECL_P (arg) ) */
       if ( TREE_CODE (arg)==PARM_DECL || !TREE_CONSTANT (arg) )
-    {
-      tmp_decl = build_decl (loc, VAR_DECL, NULL_TREE, TREE_TYPE(arg));
-      pushdecl (tmp_decl);
-
-      add_stmt (build_modify_expr (loc, tmp_decl, NULL_TREE, NOP_EXPR, loc, arg, NULL_TREE));
-      CALL_EXPR_ARG (call, i) = tmp_decl;
-    }
+	{
+	  tmp_decl = build_decl (loc, VAR_DECL, NULL_TREE, TREE_TYPE(arg));
+	  pushdecl (tmp_decl);
+
+	  add_stmt (build_modify_expr (loc, tmp_decl, NULL_TREE, NOP_EXPR, loc, arg, NULL_TREE));
+	  CALL_EXPR_ARG (call, i) = tmp_decl;
+	}
+       i++;
     }
 
   return call;
--- a/gcc/cbc-tree.h	Mon Aug 22 04:01:01 2011 +0900
+++ b/gcc/cbc-tree.h	Tue Sep 20 16:58:47 2011 +0900
@@ -1,8 +1,8 @@
-//#define CbC_PRETENDED_STACK_SIZE 256
+/* #define CbC_PRETENDED_STACK_SIZE 256 */
 #define CbC_PRETENDED_STACK_SIZE 1024
 
 /* Set if the fntype is code segment on CbC language.  */
-// flag3,5,6 has been used by c-tree.h
+/* flag3,5,6 has been used by c-tree.h */
 #define CbC_IS_CODE_SEGMENT(TYPE) TYPE_LANG_FLAG_5 ( FUNCTION_TYPE_CHECK(TYPE))
 
 /* Set if the CALL_EXPR NODE is goto statement on CbC language.  */
--- a/gcc/tree.h	Mon Aug 22 04:01:01 2011 +0900
+++ b/gcc/tree.h	Tue Sep 20 16:58:47 2011 +0900
@@ -1707,7 +1707,6 @@
  */
 #define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1)
 #define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2)
-#define CALL_EXPR_ARGS(NODE) call_expr_arglist (NODE)
 #define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3)
 #define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
 
@@ -4952,7 +4951,6 @@
 extern int operand_equal_for_phi_arg_p (const_tree, const_tree);
 extern tree call_expr_arg (tree, int);
 extern tree *call_expr_argp (tree, int);
-extern tree call_expr_arglist (tree);
 extern tree create_artificial_label (location_t);
 extern const char *get_name (tree);
 extern bool stdarg_p (const_tree);