[PATCH] D30174: [Sema][ObjC] Warn about 'performSelector' calls with selectors that return record types
Alex Lorenz via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 20 15:54:48 PST 2017
arphaman added a comment.
In https://reviews.llvm.org/D30174#681801, @ahatanak wrote:
> Do we still issue a warning even when the struct can be returned in a register? For example, x86 can return a small struct (for example, a struct with one int field) in a single register, in which case it's fine to pass it to performSelector via @selector.
Yes, we do. Primarily for the following reason: even if some target may return a struct in a register, another target isn't guaranteed to do the same thing. It's better to always warn about this rather than accept some small structs. Furthermore, the official documentation states that "For methods that return anything other than an object, use NSInvocation." [1], so methods that return records are completely prohibited by the docs.
> If we should warn only when the method has to return via sret, then it looks like we have to delay issuing the warning until we know where the return value goes (IRGen?).
[1] https://developer.apple.com/reference/objectivec/1418956-nsobject/1418867-performselector?language=objc
Repository:
rL LLVM
https://reviews.llvm.org/D30174
More information about the cfe-commits
mailing list