summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-07-19 19:47:40 +0000
committerTed Kremenek <kremenek@apple.com>2010-07-19 19:47:40 +0000
commit5c3e1b9a54ac387ff770795be0516ef7bfd2603f (patch)
tree489fda017a57e093a318d49bef9113e8ee7c9566
parent99b5524324eab9457af1d7cb392f0a48f1b854ba (diff)
downloadbcm5719-llvm-5c3e1b9a54ac387ff770795be0516ef7bfd2603f.tar.gz
bcm5719-llvm-5c3e1b9a54ac387ff770795be0516ef7bfd2603f.zip
Add missing conversion specifier parsing for 'u', 'x', 'o', and 's'. Fixes <rdar://problem/8204052>.
llvm-svn: 108742
-rw-r--r--clang/lib/Analysis/ScanfFormatString.cpp4
-rw-r--r--clang/test/Sema/format-strings-scanf.c3
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Analysis/ScanfFormatString.cpp b/clang/lib/Analysis/ScanfFormatString.cpp
index a5fe77ddd88..0ea0754313d 100644
--- a/clang/lib/Analysis/ScanfFormatString.cpp
+++ b/clang/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/clang/test/Sema/format-strings-scanf.c b/clang/test/Sema/format-strings-scanf.c
index 5341ad5ee9b..ac53d66bf63 100644
--- a/clang/test/Sema/format-strings-scanf.c
+++ b/clang/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
}
OpenPOWER on IntegriCloud