On Wed, 2012-02-01 at 20:03 -0500, Jeff Garzik wrote: > On 02/01/2012 07:09 PM, Christopher Li wrote: > > Ok, this patch definitely works. However, I think there is ways to get the > > type without this patch. The more general question is, how to get type of > > any given pseudo register. > > > That is useful, yes. But it does not address this specific problem. > > We need the function declaration remembered, rather than what we have > now -- a list of arguments with full type information, specific to its > callsite. > > You cannot deduce that a function call is/not varargs presently, even > with a working pseudo->type setup. > > varargs is just one of those annoying areas where the compiler needs to > have rather specific knowledge, in order to properly construct a call And there could be more. For example specific attributes on the declaration may affect the ABI for the call (think asmlinkage or good old pascal calling conventions on old macos :-) Not something we absolutely need to sort out right now but another reason why we really need to base the LLVM side definition based on the declaration. I'll try to toy a bit more this week-end see if the patches work for all cases I can think of. We really have two different things (represented by the two different hunks) which we might try to better factor: The case of a function call where we are after the declaration, and the case of creating an llvm type containing a function pointer (which can happen as part of the first one if an argument is a function pointer) for which we are looking at the base_type. We should at least make it a single piece of code that takes a symbol and shoots out a llvm ref. Cheers, Ben. -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html