On Mon, Jul 8, 2013 at 5:56 PM, Jonathan Schleifer <[email protected]> wrote: > Am 08.07.2013 um 23:47 schrieb Eli Friedman: > >> Err, sorry, I'm not familiar with the details of the forwarding >> handler; I was sort of assuming objc_msg_lookup just returned the >> function to call. :) > > Yes, it does. However, for forwarding, it returns a function that does the > forwarding instead. This function then - for the simple case - switches the > target object by changing the first argument (it calls another method to > retrieve that target). > > For structs, however, the first argument is a pointer to the struct to > return. Thus objc_msg_lookup_stret is the same as objc_msg_lookup, except > that it returns a function for forwarding that switches the second argument > instead of the first.
Ah, okay. > For floats (i.e. x87), this should not be required, as the first argument is > still the object and the function forwarded to is required to handle the > return. And I don't think there is an architecture which passes a pointer to > the float to return as the first (non-float) argument, is there? IIRC, we would classify it as stret anyway, even if the type in question isn't technically a struct. (Pretty sure you can trigger this with e.g. _Complex double on a soft-float target.) On the other hand, if you care about Objective-C++, you might want to check the behavior for a selector returning a class with a non-trivial copy constructor. >> Is this patch going to work correctly for other GNU-style runtimes >> without an objc_msg_lookup_stret function? > > Yes, it only touches the behaviour for -fobjc-runtime=objfw. However, I > attached a new patch to this e-mail that only adds objc_msg_lookup_stret and > not objc_msg_lookup_fpret, as we already agreed that handling non-integer > messages to nil should be the compiler's job and that it is not necessary for > forwarding ;). Please use the new patch instead! Thanks :) Okay. Granted, you probably need to add the handling for non-integer messages in a followup; the current code that does this on the Mac is in Mac-specific code. This needs a regression test for both the objfw and non-objfw cases. (Sorry, I didn't realize it was missing before.) -Eli _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
