From c9a89fec60a20eb3269caa95eca048d45ab215ad Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Sat, 30 Jan 2010 01:02:18 +0000 Subject: [PATCH] Add format string checking of 'double' arguments. Fixes . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94867 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/PrintfFormatString.cpp | 3 +++ test/Sema/format-strings.c | 1 + 2 files changed, 4 insertions(+) diff --git a/lib/Analysis/PrintfFormatString.cpp b/lib/Analysis/PrintfFormatString.cpp index 357080fa74..05b5d9cceb 100644 --- a/lib/Analysis/PrintfFormatString.cpp +++ b/lib/Analysis/PrintfFormatString.cpp @@ -309,6 +309,9 @@ ArgTypeResult FormatSpecifier::getArgType(ASTContext &Ctx) const { // version of ptrdiff_t? return ArgTypeResult(); } + + if (CS.isDoubleArg()) + return Ctx.DoubleTy; // FIXME: Handle other cases. return ArgTypeResult(); diff --git a/test/Sema/format-strings.c b/test/Sema/format-strings.c index f1ab868dc7..21d7770e12 100644 --- a/test/Sema/format-strings.c +++ b/test/Sema/format-strings.c @@ -160,6 +160,7 @@ void test10(int x, float f, int i) { printf("%"); // expected-warning{{incomplete format specifier}} printf("%.d", x); // no-warning printf("%.", x); // expected-warning{{incomplete format specifier}} + printf("%f", 4); // expected-warning{{conversion specifies type 'double' but the argument has type 'int'}} } typedef struct __aslclient *aslclient;