<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">On Jul 26, 2013, at 2:09 PM, Jonathan Schleifer <<a href="mailto:js@webkeks.org">js@webkeks.org</a>> wrote:<br><div><blockquote type="cite"><div style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">thanks for reviewing it.<br><br><blockquote type="cite">This isnít really a language extension; itís an ABI feature that fixes a language<br>feature.  I donít think it rises to the level of being worth documenting in the<br>language-extensions section.<br></blockquote><br>I agree here, a lot. However, Eli asked me to document it there as all other __has_feature are documented there.<br><br><blockquote type="cite">Iím also skeptical that this deserves to be exposed to the user with __has_feature.<br>Do you have a use case for that, or are you just doing it for generic reasons?<br></blockquote><br>Yes! What I do is check that there is an assembly implementation for of_forward_stret the architecture and that __has_feature(objc_msg_lookup_stret) is true. If that is the case, I set a define so that it's possible to check if forwarding is available with structs. This is important in e.g. the automatic tests: Without such a define, it would just always try to forward for stret - and crash.<br><br><blockquote type="cite">If it is important to expose this with __has_feature, you should really abstract this<br>into ObjCRuntime, like what we do with hasTerminate() (which Iíll note also does<br>not have a __has_feature check).<br></blockquote><br>Yes, __has_feature is important as it's the only way to see if Clang supports it. After all, the runtime has to provide of_forward_stret and objc_msg_lookup_stret, but both are useless if Clang does not emit calls to objc_msg_lookup_stret. Thus the __has_feature to check if all three are given. It's the only way to make it possible to let code check if that feature is available instead of just hoping it is and crash.<br></div></blockquote><div><br></div><div>I feel like making your runtime's unit tests more portable across compiler versions isnít really a compelling reason to expose something like this thatís essentially a fix to an existing language feature.  We donít get to remove __has_feature checks ever, so weíve generally tried to avoid them for improvements like this, because otherwise the logic produces a plausible argument for basically every change to the compiler to get an independent __has_feature check.</div><div><br></div><div>John.</div></div></body></html>