diff options
author | Hans Wennborg <hans@hanshq.net> | 2011-12-09 10:51:29 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2011-12-09 10:51:29 +0000 |
commit | 117348caf0a8f91782e9e32e32a8689576f394d7 (patch) | |
tree | a2701bd614d6de247c3c2bd93e416c7cf97319c6 | |
parent | 4b45c111f0ac43441c475aca4ecc1d62499e0cb8 (diff) |
fix format specifier fixit for printf("%ld", "foo");
It should reset the length modifier (unless it's a wchar_t string).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146252 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/PrintfFormatString.cpp | 2 | ||||
-rw-r--r-- | test/Sema/format-strings-fixit.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/Analysis/PrintfFormatString.cpp b/lib/Analysis/PrintfFormatString.cpp index e14c952292..097cc62a6c 100644 --- a/lib/Analysis/PrintfFormatString.cpp +++ b/lib/Analysis/PrintfFormatString.cpp @@ -366,6 +366,8 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt) { // Set the long length modifier for wide characters if (QT->getPointeeType()->isWideCharType()) LM.setKind(LengthModifier::AsWideChar); + else + LM.setKind(LengthModifier::None); return true; } diff --git a/test/Sema/format-strings-fixit.c b/test/Sema/format-strings-fixit.c index e87d8acef5..bfb54327b7 100644 --- a/test/Sema/format-strings-fixit.c +++ b/test/Sema/format-strings-fixit.c @@ -42,7 +42,7 @@ void test() { // Bad length modifiers printf("%hhs", "foo"); printf("%1$zp", (void *)0); - + // Perserve the original formatting for unsigned integers. unsigned long val = 42; printf("%X", val); @@ -57,6 +57,9 @@ void test() { printf("%f", (intmax_t) 42); printf("%f", (uintmax_t) 42); printf("%f", (ptrdiff_t) 42); + + // string + printf("%ld", "foo"); } // Validate the fixes... @@ -83,3 +86,4 @@ void test() { // CHECK: printf("%jd", (intmax_t) 42); // CHECK: printf("%ju", (uintmax_t) 42); // CHECK: printf("%td", (ptrdiff_t) 42); +// CHECK: printf("%s", "foo"); |