help:how to get the Nth argument stmt from CALL_EXPR stmt tree
Daniel Berlin
dberlin@dberlin.org
Wed Jul 6 15:41:00 GMT 2005
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
> >> bugs@whitecell.org
> >> 2005-07-05
> >>
> >>
>
> = = = = = = = = = = = = = = = = = = = =
>
>
> 致
> 礼!
>
>
> alert7
> bugs@whitecell.org
> 2005-07-06
>
>
>
More information about the Gcc
mailing list