diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-09-29 05:52:16 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-09-29 05:52:16 +0000 |
commit | 6e302b2e6e8912a2e92ee035b6412a5d098ade1c (patch) | |
tree | e689eefa31eea2add91bf16cacb4eef19f9892b4 /clang/lib/Sema/SemaChecking.cpp | |
parent | dd1904e7a67682d4620b74287d3438ef7e618460 (diff) | |
download | bcm5719-llvm-6e302b2e6e8912a2e92ee035b6412a5d098ade1c.tar.gz bcm5719-llvm-6e302b2e6e8912a2e92ee035b6412a5d098ade1c.zip |
Do not warn about empty format strings when there are no data arguments. Fixes <rdar://problem/9473155>.
llvm-svn: 140777
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index c29ffb5368b..e0b24c4be6e 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1880,9 +1880,10 @@ void Sema::CheckFormatString(const StringLiteral *FExpr, StringRef StrRef = FExpr->getString(); const char *Str = StrRef.data(); unsigned StrLen = StrRef.size(); + const unsigned numDataArgs = TheCall->getNumArgs() - firstDataArg; // CHECK: empty format string? - if (StrLen == 0) { + if (StrLen == 0 && numDataArgs > 0) { Diag(FExpr->getLocStart(), diag::warn_empty_format_string) << OrigFormatExpr->getSourceRange(); return; @@ -1890,18 +1891,16 @@ void Sema::CheckFormatString(const StringLiteral *FExpr, if (isPrintf) { CheckPrintfHandler H(*this, FExpr, OrigFormatExpr, firstDataArg, - TheCall->getNumArgs() - firstDataArg, - isa<ObjCStringLiteral>(OrigFormatExpr), Str, - HasVAListArg, TheCall, format_idx); + numDataArgs, isa<ObjCStringLiteral>(OrigFormatExpr), + Str, HasVAListArg, TheCall, format_idx); if (!analyze_format_string::ParsePrintfString(H, Str, Str + StrLen)) H.DoneProcessing(); } else { CheckScanfHandler H(*this, FExpr, OrigFormatExpr, firstDataArg, - TheCall->getNumArgs() - firstDataArg, - isa<ObjCStringLiteral>(OrigFormatExpr), Str, - HasVAListArg, TheCall, format_idx); + numDataArgs, isa<ObjCStringLiteral>(OrigFormatExpr), + Str, HasVAListArg, TheCall, format_idx); if (!analyze_format_string::ParseScanfString(H, Str, Str + StrLen)) H.DoneProcessing(); |