]> granicus.if.org Git - clang/commitdiff
Add missing conversion specifier parsing for 'u', 'x', 'o', and 's'. Fixes <rdar...
authorTed Kremenek <kremenek@apple.com>
Mon, 19 Jul 2010 19:47:40 +0000 (19:47 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 19 Jul 2010 19:47:40 +0000 (19:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108742 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScanfFormatString.cpp
test/Sema/format-strings-scanf.c

index a5fe77ddd889cc24bf45fce60b302cafb1c18825..0ea0754313d75b13b86b4dc28ec8c357b1d5e90d 100644 (file)
@@ -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) {
index 5341ad5ee9b3c8aca0107694ab29cdef4b13fe80..ac53d66bf63e6de7b8a98b46e136e66c731fc30a 100644 (file)
@@ -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
 }