# HG changeset patch # User Shinji KONO # Date 1316505527 -32400 # Node ID 6381ea127240e66638c68ba2c18a951bf1d8dcc6 # Parent 3c5ea37d90686e374965e8f318f80c2ea5b4e01c call argument iterator fix diff -r 3c5ea37d9068 -r 6381ea127240 gcc/c-parser.c --- 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; diff -r 3c5ea37d9068 -r 6381ea127240 gcc/cbc-tree.h --- 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. */ diff -r 3c5ea37d9068 -r 6381ea127240 gcc/tree.h --- 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);