functions calls Vs calls using function pointers

Digvijoy Chatterjee chatterjee.digvijoy@gmail.com
Thu May 25 11:07:00 GMT 2006


On 5/25/06, Andrew Haley <aph@redhat.com> wrote:
> Digvijoy Chatterjee writes:
>
>  > I am trying to understand how cc1 works ,and was going through the
>  > gcc-4.0.3 source , and after a lot of research , found functions
>  > for parsing Declaration/Definitions(gcc-4.0.3/gcc/c-decl.c:
>  > grokdeclarator) and "actual function calls" used inside a
>  > translation unit ,in (gcc-4.0.3/gcc/calls.c:prepare_call_address
>  > )in the C compilation process .
>  >
>  > The problem however is when i choose to call a function using
>  > function-pointers ,the name of the function pointer appears as "-"
>  > in this prepare_call_address function (as seen in gdb). Can anyone
>  > point me to a C file/function in the gcc source tree where the
>  > compiler knows the exact function-pointer name being used to call a
>  > function.
>
> The problem I'm having with this (and probably everyone else is as
> well) is that I don't really know what you're asking.
>
> prepare_call_address() is called a long time after the C source code
> has been parsed.  It's part of the code generation phase.
>
> prepare_call_address() isn't passed a variable, it's passed an RTX.
> That RTX can either be a symbol_ref or something more complex.  As
> long as it, when executed, produces an address that's OK.
>
> If you want to see the expression that is used to form the address,
> put your breakpoint on expand_call() and look at the exp.
>
>  > typedef void (*fptr) (int);
>  > void A(int);
>  > int main()
>  > {
>  > fptr fp;
>  > fp=A;
>  > fp();
>  > }
>  > void A(int i){printf("in A\n");}
>  >
>  > when i try and compile this , using gcc, its quick to point an error :
>  > too few arguments to fp;
>
> Correct.  What's your question?
>
> Andrew.
>
The question is which function in which .c file of  the gcc source
tree , understands the  fact that a call to fp is actually a call to A
, and therefore complains about wrong arguments.
I want the name of the function where the compiler while parsing a .c
file associates a function pointer ,to the function which will be
called at runtime.
As an example the "prepare_call_address" in line no:167(approx) in
gcc-4.0.3/gcc/calls.c in the gcc source knows when a certain function
A is called in  main,but it doesnt know anything about fp, if i try to
print names of called functions in prepare_call_address  it prints "-"
and not fp nor A,  for an actual function call , it prints the name.
I hope i made myself clear.
Digz



More information about the Gcc-help mailing list