This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: help:how to get the Nth argument stmt from CALL_EXPR stmt tree


Daniel Berlin,您好!

    I'am gcc beginner,thank your answer .

	Is it the return Value of GetCallArgOperand function that u given stmt tree?

    I pass return value--ops to   function FOR_EACH_SSA_TREE_OPERAND
	FOR_EACH_SSA_TREE_OPERAND (use, ops, iter, SSA_OP_ALL_USES)        {

	}
	
    but ,at runtime ,FOR_EACH_SSA_TREE_OPERAND report internal compiler error: in stmt_ann, at tree-flow-inline.h:55  .
	
	what happen? Maybe there is another problem.how to fix it?

	
	Maybe My really problem is How to get stmt tree from a common tree value.

======= 2005-07-05 18:40:00 您在来信中写道:=======

>On Tue, 2005-07-05 at 23:18 +0800, alert7 wrote:
>> hi,all
>> 	
>> 	
>>       I don't know how to get the Nth argument stmt  from CALL_EXPR stmt tree?
>
>
>assuming TREE_CODE (call) == CALL_EXPR:
>
>GetCallArgOperand(tree call, int i)
>{
>  int j = 0;
>  tree arg;	
>  for (arg = TREE_OPERAND (call, 1); arg; arg = TREE_CHAIN (arg), j++)
>  {
>     if (i == j)
>       return TREE_VALUE (arg);
>
>  }
>}
>
>>
>> 	  the GetCallArgOperands implement this function that i code ,but it isn't working :(
>
>You are looking at the arguments the declaration takes, instead of the
>arguments passed to the function.
>Arguments passed to the function are stored in TREE_OPERAND (call, 1),
>as tree.def says.
>
>>
>> 	  thanks any advice or piece of example code .
>>
>> //////////////////////////////////////////////////////
>>
>>  tree GetCallArgOperands(tree stmt ,int i){
>>  tree func, param, args;
>>  int j = 1;
>>
>>
>>   func = get_callee_fndecl (stmt);
>>
>>   for (param = DECL_ARGUMENTS (func), args = TREE_OPERAND (stmt, 1);
>> 	   param && args;
>> 	   param = TREE_CHAIN (param), args = TREE_CHAIN (args))
>>  {
>> 	  tree arg = TREE_VALUE (args);
>> 	  if (param != arg)
>> 	    {
>> 		// FIXME:
>> 	    }
>> 	  if (j==i)
>> 	  {
>> 		  fprintf(stderr,"args ----------\n");
>> 		  debug_tree(arg);
>> 	
>> 		  return default_def (arg); //FIXME: to stmt tree ?
>> 	  }
>> 	
>> 	  j++;
>>  }
>> 	  return NULL_TREE;
>> }
>> /////////////////////////////////////////////////
>>
>>
>>
>>  				
>>
>>         bugs
>>         bugs@whitecell.org
>>           2005-07-05
>>
>>

= = = = = = = = = = = = = = = = = = = =
			

        致
礼!

				
        alert7
        bugs@whitecell.org
          2005-07-06




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]