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


Digvijoy Chatterjee writes:
 > 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?

 > 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.

That's not what happens.

You declare fp to be type void (*fptr) (int).

Therefore if you call a function through fp, you have to pass an int.
This is because of the type of variable fp, not because of A.

You can easily demonstrate this by compiling:

typedef void (*fptr) (int);

int main()
{
fptr fp;
fp();
}

 > 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.

This never happens, and therefore I can't answer your question.

Andrew.


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