Author: kremenek Date: Wed Jun 16 20:12:20 2010 New Revision: 106196 URL: http://llvm.org/viewvc/llvm-project?rev=106196&view=rev Log: Fix format string checking of '%c' by treating it as an integer conversion. Fixes PR 7391.
Modified: cfe/trunk/include/clang/Analysis/Analyses/PrintfFormatString.h cfe/trunk/test/Sema/format-strings-fixit.c cfe/trunk/test/Sema/format-strings.c Modified: cfe/trunk/include/clang/Analysis/Analyses/PrintfFormatString.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/PrintfFormatString.h?rev=106196&r1=106195&r2=106196&view=diff ============================================================================== --- cfe/trunk/include/clang/Analysis/Analyses/PrintfFormatString.h (original) +++ cfe/trunk/include/clang/Analysis/Analyses/PrintfFormatString.h Wed Jun 16 20:12:20 2010 @@ -57,6 +57,7 @@ InvalidSpecifier = 0, // C99 conversion specifiers. dArg, // 'd' + IntAsCharArg, // 'c' iArg, // 'i', oArg, // 'o', uArg, // 'u', @@ -70,7 +71,6 @@ GArg, // 'G', aArg, // 'a', AArg, // 'A', - IntAsCharArg, // 'c' CStrArg, // 's' VoidPtrArg, // 'p' OutIntPtrArg, // 'n' Modified: cfe/trunk/test/Sema/format-strings-fixit.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/format-strings-fixit.c?rev=106196&r1=106195&r2=106196&view=diff ============================================================================== --- cfe/trunk/test/Sema/format-strings-fixit.c (original) +++ cfe/trunk/test/Sema/format-strings-fixit.c Wed Jun 16 20:12:20 2010 @@ -15,6 +15,8 @@ printf("abc%0f", "testing testing 123"); printf("%u", (long) -12); printf("%p", 123); + printf("%c\n", "x"); + printf("%c\n", 1.23); // Larger types printf("%+.2d", (unsigned long long) 123456); Modified: cfe/trunk/test/Sema/format-strings.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/format-strings.c?rev=106196&r1=106195&r2=106196&view=diff ============================================================================== --- cfe/trunk/test/Sema/format-strings.c (original) +++ cfe/trunk/test/Sema/format-strings.c Wed Jun 16 20:12:20 2010 @@ -172,6 +172,8 @@ printf("%f\n", (long double) 1.0); // expected-warning{{conversion specifies type 'double' but the argument has type 'long double'}} // The man page says that a zero precision is okay. printf("%.0Lf", (long double) 1.0); // no-warning + printf("%c\n", "x"); // expected-warning{{conversion specifies type 'int' but the argument has type 'char *'}} + printf("%c\n", 1.23); // expected-warning{{conversion specifies type 'int' but the argument has type 'double'}} } void test11(void *p, char *s) { _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits