This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Re: help:how to get the Nth argument stmt from CALL_EXPR stmt tree
- From: "alert7" <bugs at whitecell dot org>
- To: Daniel Berlin <dberlin at dberlin dot org>
- Cc: gcc at gcc dot gnu dot org <gcc at gcc dot gnu dot org>
- Date: Wed, 6 Jul 2005 23:30:16 +0800
- Subject: 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