diff options
| author | Ted Kremenek <kremenek@apple.com> | 2010-01-28 00:02:05 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2010-01-28 00:02:05 +0000 |
| commit | c8d9c01f0425c20788d4b207a324a302ef26e3c2 (patch) | |
| tree | 486552ad93d3088cb2fb818c517ea64e6d7a6085 /clang | |
| parent | 56db8c30088c9f65c1ac6e6e969d29a6cea68ab6 (diff) | |
| download | bcm5719-llvm-c8d9c01f0425c20788d4b207a324a302ef26e3c2.tar.gz bcm5719-llvm-c8d9c01f0425c20788d4b207a324a302ef26e3c2.zip | |
Add a few more conversion specifiers to ParseFormatSpecifier (these appear in SemaChecking).
llvm-svn: 94704
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Analysis/PrintfFormatString.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/clang/lib/Analysis/PrintfFormatString.cpp b/clang/lib/Analysis/PrintfFormatString.cpp index b2adeeb5f9e..b4dce9ffcc5 100644 --- a/clang/lib/Analysis/PrintfFormatString.cpp +++ b/clang/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); |

