aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/PrintfFormatString.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-01-28 00:02:05 +0000
committerTed Kremenek <kremenek@apple.com>2010-01-28 00:02:05 +0000
commitc7ae51a3cd9460db8280e8623c90614f246e46d2 (patch)
treef3b0b4edb231430e427081b3639108eea63af334 /lib/Analysis/PrintfFormatString.cpp
parent8f0a1c73fd2b83afd4b1fce6f964535b51d13659 (diff)
Add a few more conversion specifiers to ParseFormatSpecifier (these appear in SemaChecking).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94704 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/PrintfFormatString.cpp')
-rw-r--r--lib/Analysis/PrintfFormatString.cpp47
1 files changed, 27 insertions, 20 deletions
diff --git a/lib/Analysis/PrintfFormatString.cpp b/lib/Analysis/PrintfFormatString.cpp
index b2adeeb5f9..b4dce9ffcc 100644
--- a/lib/Analysis/PrintfFormatString.cpp
+++ b/lib/Analysis/PrintfFormatString.cpp
@@ -85,7 +85,7 @@ static FormatSpecifierResult ParseFormatSpecifier(printf::FormatStringHandler &H
const char *&Beg, const char *E) {
const char *I = Beg;
- const char *Start = NULL;
+ const char *Start = 0;
UpdateOnReturn <const char*> UpdateBeg(Beg, I);
// Look for a '%' character that indicates the start of a format specifier.
@@ -191,28 +191,35 @@ static FormatSpecifierResult ParseFormatSpecifier(printf::FormatStringHandler &H
// Finally, look for the conversion specifier.
ConversionSpecifier::Kind cs;
switch (*I) {
+ case 'D':
+ case 'O':
+ case 'U':
+ case 'C':
+ case 'S':
default:
H.HandleInvalidConversionSpecifier(I);
return true;
- case 'd' : cs = ConversionSpecifier::dArg; break;
- case 'i' : cs = ConversionSpecifier::iArg; break;
- case 'o' : cs = ConversionSpecifier::oArg; break;
- case 'u' : cs = ConversionSpecifier::uArg; break;
- case 'x' : cs = ConversionSpecifier::xArg; break;
- case 'X' : cs = ConversionSpecifier::XArg; break;
- case 'f' : cs = ConversionSpecifier::fArg; break;
- case 'F' : cs = ConversionSpecifier::FArg; break;
- case 'e' : cs = ConversionSpecifier::eArg; break;
- case 'E' : cs = ConversionSpecifier::EArg; break;
- case 'g' : cs = ConversionSpecifier::gArg; break;
- case 'G' : cs = ConversionSpecifier::GArg; break;
- case 'a' : cs = ConversionSpecifier::aArg; break;
- case 'A' : cs = ConversionSpecifier::AArg; break;
- case 'c' : cs = ConversionSpecifier::IntAsCharArg; break;
- case 's' : cs = ConversionSpecifier::CStrArg; break;
- case 'p' : cs = ConversionSpecifier::VoidPtrArg; break;
- case 'n' : cs = ConversionSpecifier::OutIntPtrArg; break;
- case '%' : cs = ConversionSpecifier::PercentArg; break;
+
+ // Handle the cases we know about.
+ case 'd': cs = ConversionSpecifier::dArg; break;
+ case 'i': cs = ConversionSpecifier::iArg; break;
+ case 'o': cs = ConversionSpecifier::oArg; break;
+ case 'u': cs = ConversionSpecifier::uArg; break;
+ case 'x': cs = ConversionSpecifier::xArg; break;
+ case 'X': cs = ConversionSpecifier::XArg; break;
+ case 'f': cs = ConversionSpecifier::fArg; break;
+ case 'F': cs = ConversionSpecifier::FArg; break;
+ case 'e': cs = ConversionSpecifier::eArg; break;
+ case 'E': cs = ConversionSpecifier::EArg; break;
+ case 'g': cs = ConversionSpecifier::gArg; break;
+ case 'G': cs = ConversionSpecifier::GArg; break;
+ case 'a': cs = ConversionSpecifier::aArg; break;
+ case 'A': cs = ConversionSpecifier::AArg; break;
+ case 'c': cs = ConversionSpecifier::IntAsCharArg; break;
+ case 's': cs = ConversionSpecifier::CStrArg; break;
+ case 'p': cs = ConversionSpecifier::VoidPtrArg; break;
+ case 'n': cs = ConversionSpecifier::OutIntPtrArg; break;
+ case '%': cs = ConversionSpecifier::PercentArg; break;
}
FS.setConversionSpecifier(cs);
return FormatSpecifierResult(Start, FS);