This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: functions calls Vs calls using function pointers


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]