n 5/25/06, Andrew Haley <aph@xxxxxxxxxx> wrote:
Digvijoy Chatterjee writes: > On 5/25/06, Andrew Haley <aph@xxxxxxxxxx> 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.
Right , Which is the file then which has code , to compare the erroneous call fp(); to its declaration as in the typedef ?where does the compiler know fp() is a function call ? Regards Digz