On Jan 20, 2012, at 5:36 PM, Jean-Daniel Dupas wrote:

> 
> Le 21 janv. 2012 à 02:07, Eli Friedman a écrit :
> 
>> On Fri, Jan 20, 2012 at 5:03 PM, Jean-Daniel Dupas
>> <[email protected]> wrote:
>>> 
>>> Le 20 janv. 2012 à 23:44, Eli Friedman a écrit :
>>> 
>>>> On Fri, Jan 20, 2012 at 2:09 PM, Jean-Daniel Dupas
>>>> <[email protected]> wrote:
>>>>> Hi,
>>>>> 
>>>>> Actually, clang automatically add a "format(printf)" attribute to the 
>>>>> declarations of NSLog/NSLogv functions.
>>>>> This is actually wrong, as NSLog expect an NSString format attribute. It 
>>>>> is not really an issue as the code that checks the format string is the 
>>>>> same for printf and NSString,
>>>>> but actually I'm working on adding support for CFString format, and 
>>>>> having the wrong tag on NSLog functions prevent some code factoring 
>>>>> between CFString and NSString format checking.
>>>>> 
>>>>> Now that NSString format is properly checked, this trick is no longer 
>>>>> needed, so I'd like to stop forcing the type to printf, and use NSString 
>>>>> instead.
>>>>> 
>>>>> This patch also reduce the scope of this hack to objc code only (so if by 
>>>>> any change someone write a C library with an NSLog function, clang will 
>>>>> not try to tag it with an NSString format attribute).
>>>> 
>>>> If you're going to be in the area anyway, can you get rid of the hack
>>>> altogether and add definitions of these functions into Builtins.def?
>>>> These functions shouldn't need any special logic.
>>>> 
>>>> -Eli
>>> 
>>> 
>>> I have nothing against completely removing this hack, especially as these 
>>> functions are properly declared in the Foundation headers,
>>> but is it worth putting a definition in Builtins.def ? Unlike other objc 
>>> functions defined in Builtins.def, NSLog functions are not part of the 
>>> runtime.
>> 
>> Strictly speaking, it isn't, but we're already pretending it is anyway
>> by marking it with a format attribute, no?
>> 
>> -Eli
> 
> 
> Yes, we were doing it. My question was more "Is there any good reason to 
> continue to pretend it" ?
> I just don't know why they where hard-coded in the first place.

I don't remember why it was done this way, but Eli's suggestion is the right 
approach.

> 
> Anyway, I will have a look at what should be done to add them in 
> Builtins.def. It will require a little work as the string format used to 
> defined the attributes does not support 'NSString' format out of the box.
> It supports only printf and scanf currently.

Yes, it should be enhanced to support the NSString format.

Thanks for doing this.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to