<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 14, 2009, at 3:30 PM, Chris Lattner wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br>On Aug 14, 2009, at 3:20 PM, Eli Friedman wrote:<br><br><blockquote type="cite">On Fri, Aug 14, 2009 at 3:12 PM, Ted Kremenek<<a href="mailto:kremenek@apple.com">kremenek@apple.com</a>> wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Unless I'm mistaken, this breaks constructs like the following:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">__attribute((malloc)) void *(*f)();<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">-Eli<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">I implemented handling of this case, but I noticed that GCC actually rejects<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">attribute 'malloc' being applied to function pointers ("warning: 'malloc'<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">attribute ignored").  Should we do the same in Clang?  For function<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">pointers, the malloc attribute really a property of the pointer type, not<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">the declaration, but apparently GCC doesn't even reason about that.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I think it's better to be self-consistent here over being consistent<br></blockquote><blockquote type="cite">with gcc, as long as we don't break compatibility.  Function<br></blockquote><blockquote type="cite">attributes are confusing enough without making different attributes<br></blockquote><blockquote type="cite">act differently.<br></blockquote><br>The problem is that this attribute is really a decl attribute, not a type attribute.  If I have two functions with the same prototype (but one is attribute malloc) I should be able to assign them to the same function pointer, no?  If we made it part of the type system, we'd have to consider the attribute for assignment compatibility etc.<br></span></blockquote></div><div><br></div><div>Yes, this was my thought exactly.  Unless it is part of the type, the attribute doesn't make sense for function pointers.</div></body></html>