Le 31 janv. 2012 à 01:10, Nico Weber a écrit :

> On Mon, Jan 30, 2012 at 9:46 AM, Sebastian Redl
> <[email protected]> wrote:
>> 
>> On 30.01.2012, at 18:37, Nico Weber wrote:
>> 
>>> 
>>> The current %S warning implementation is wrong for just printf() as
>>> well: It compares the argument to wchar_t, but if you build your
>>> program with -fshort-wchar, clang won't warn (since your program uses
>>> wchar_t) yet printf won't work (because libc was built without
>>> -fshort-wchar). If you store your characters in an uint32* and pass
>>> that to printf() and build your program with -fshort-wchar, clang will
>>> warn (because uint32* doesn't match wchar_t* with -fshort-whar) yet
>>> the program will work correctly.
>> 
>> And just to make things more fun, Microsoft's printf takes "%S" to mean 
>> "UCS-2 string" and wprintf interprets L"%S" as "narrow string".
> 
> wchar_t is always 2 byte in Microsoft land, so -fms-extensions should
> implicitly enable -fshort-wchar, which would take care of the
> Microsoft part.
> 
> The attached patch lets %S, %C, and %ls look for a 16bit type in
> NSStrings as discussed. OK?
> 
> Nico
> <clang-percent-S.patch>



> + // AppKit was built with -fshort-wchar, so passing in 4-byte wchars is a 
> bug.

I don't think it is right to say that AppKit was built with "-fshort-wchar".
This is just that the %S modifier is implemented to take a UTF-16 string and 
not a wchar_t as the lib C does.

-- Jean-Daniel





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

Reply via email to