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
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
