On Wed, 2005-07-06 at 23:30 +0800, alert7 wrote:
> Daniel Berlin,您好!
> 
>     I'am gcc beginner,thank your answer .
> 
>       Is it the return Value of GetCallArgOperand function that u given stmt 
> tree?

No.

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

That won't work, because ops is not a statement tree.

>     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.

i'm not sure i understand.

do you want to get, given

a_5 = 69
foo(a_5)

the a_5 = 69 part?
Or a pointer a_5 inside the call to foo(..)




> 
> ======= 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
> >> [EMAIL PROTECTED]
> >>           2005-07-05
> >> 
> >> 
> 
> = = = = = = = = = = = = = = = = = = = =
>                       
> 
>         致
> 礼!
>  
>                                
>         alert7
> [EMAIL PROTECTED]
>           2005-07-06
> 
> 
> 

Reply via email to