functions calls Vs calls using function pointers

Andrew Haley aph@redhat.com
Thu May 25 10:46:00 GMT 2006


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.



More information about the Gcc-help mailing list