From: Ted Kremenek Date: Mon, 19 Jul 2010 19:47:40 +0000 (+0000) Subject: Add missing conversion specifier parsing for 'u', 'x', 'o', and 's'. Fixes . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108742 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ScanfFormatString.cpp b/lib/Analysis/ScanfFormatString.cpp index a5fe77ddd8..0ea0754313 100644 --- a/lib/Analysis/ScanfFormatString.cpp +++ b/lib/Analysis/ScanfFormatString.cpp @@ -163,6 +163,10 @@ static ScanfSpecifierResult ParseScanfSpecifier(FormatStringHandler &H, case 'C': k = ConversionSpecifier::CArg; break; case 'S': k = ConversionSpecifier::SArg; break; case '[': k = ConversionSpecifier::ScanListArg; break; + case 'u': k = ConversionSpecifier::uArg; break; + case 'x': k = ConversionSpecifier::xArg; break; + case 'o': k = ConversionSpecifier::oArg; break; + case 's': k = ConversionSpecifier::sArg; break; } ConversionSpecifier CS(conversionPosition, k); if (k == ConversionSpecifier::ScanListArg) { diff --git a/test/Sema/format-strings-scanf.c b/test/Sema/format-strings-scanf.c index 5341ad5ee9..ac53d66bf6 100644 --- a/test/Sema/format-strings-scanf.c +++ b/test/Sema/format-strings-scanf.c @@ -12,4 +12,7 @@ void test(const char *s, int *i) { scanf("%0d", i); // expected-warning{{zero field width in scanf format string is unused}} scanf("%00d", i); // expected-warning{{zero field width in scanf format string is unused}} scanf("%d%[asdfasdfd", i, s); // expected-warning{{no closing ']' for '%[' in scanf format string}} + + unsigned short s_x; + scanf ("%" "hu" "\n", &s_x); // no-warning }