Andrew Pinski wrote: > Again C has different rules from C++. > In C, the following two TUs combined together are still valid code while in > C++, > they are invalid. > > tu1.c: > > struct a > { > int t; > }; > void f(struct a); > > ---------------- cut --------------------- > tu2.c: > > typedef struct > { > int t; > }b; > void f(b a); > ---------------- cut --------------------- >
I think I am going to have to use a non-optimal solution for function pointer type matches. I am creating a pessimistic/over-expanded callgraph by saying that a function pointer call MAY call any function whose function pointer type matches the call and whose address has been taken somewhere in the source code. So maybe I can make it even more pessimistic in the C case and match all structs/unions as being the "same" for the purposes of testing function pointer equality. Maybe it is also possible to somehow generate a "type string" based on the contents of the struct/union in C, however I am not sure how I would get that to inter-operate with C++ since C++ may treat two structures with the same contents as different types. I might just go for the pessimistic match first and look at improving things later on once the rest of it is all up and going. Thanks for the input, Brendon.