Format strings: a character literal should be printed with %c, not %d.
authorJordan Rose <jordan_rose@apple.com>
Wed, 5 Dec 2012 18:44:40 +0000 (18:44 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 5 Dec 2012 18:44:40 +0000 (18:44 +0000)
commit598ec0992d5090004628aade64ee6ba60393b203
tree1589a8760b3c1ba740eae93a04a55ce8cbdb13e8
parent6aaa87e0d27b42d1d7a95c8591b57fc5b3725fb0
Format strings: a character literal should be printed with %c, not %d.

The type of a character literal is 'int' in C, but if the user writes a
character /as/ a literal, we should assume they meant it to be a
character and not a numeric value, and thus offer %c as a correction
rather than %d.

There's a special case for multi-character literals (like 'MooV'), which
have implementation-defined value and usually cannot be printed with %c.
These still use %d as the suggestion.

In C++, the type of a character literal is 'char', and so this problem
doesn't exist.

<rdar://problem/12282316>

llvm-svn: 169398
clang/lib/Sema/SemaChecking.cpp
clang/test/FixIt/format.m