]> granicus.if.org Git - clang/commitdiff
Control 'invalid conversion specifier' warnings under a subflag (-Wformat-invalid...
authorTed Kremenek <kremenek@apple.com>
Sat, 27 Aug 2011 00:16:45 +0000 (00:16 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 27 Aug 2011 00:16:45 +0000 (00:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138686 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/DiagnosticSemaKinds.td
test/Sema/format-strings.c

index add2ac365c34f6dc57f4c390b791f0e13a68bbde..a55254286b7a9220858990ef47b7bbd22ffbc9c5 100644 (file)
@@ -235,11 +235,12 @@ def Unused : DiagGroup<"unused",
                         DiagCategory<"Unused Entity Issue">;
 
 // Format settings.
+def FormatInvalidSpecifier : DiagGroup<"format-invalid-specifier">;
 def FormatSecurity : DiagGroup<"format-security">;
 def FormatY2K : DiagGroup<"format-y2k">;
 def Format : DiagGroup<"format",
                        [FormatExtraArgs, FormatZeroLength, NonNull,
-                        FormatSecurity, FormatY2K]>,
+                        FormatSecurity, FormatY2K, FormatInvalidSpecifier]>,
              DiagCategory<"Format String Issue">;
 def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
 def Format2 : DiagGroup<"format=2",
index 2781675f00a8ae063133d33c3e102e3fb8a1ac5a..8b39c782f28bfb0028c73033690c05e5a2035cea 100644 (file)
@@ -4232,7 +4232,7 @@ def warn_printf_insufficient_data_args : Warning<
 def warn_printf_data_arg_not_used : Warning<
   "data argument not used by format string">, InGroup<FormatExtraArgs>;
 def warn_format_invalid_conversion : Warning<
-  "invalid conversion specifier '%0'">, InGroup<Format>;
+  "invalid conversion specifier '%0'">, InGroup<FormatInvalidSpecifier>;
 def warn_printf_incomplete_specifier : Warning<
   "incomplete format specifier">, InGroup<Format>;
 def warn_missing_format_string : Warning<
index b47d3ca2616cf25c681a2361e3fade6e254c11b8..20c665b978be6743d2f9e42030df30d869baa0bb 100644 (file)
@@ -372,3 +372,13 @@ void check_char(unsigned char x, signed char y) {
   printf("%c", x); // no-warning
   printf("%hhu", y); // no-warning
 }
+
+// Test suppression of individual warnings.
+
+void test_suppress_invalid_specifier() {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat-invalid-specifier"
+  printf("%@", 12); // no-warning
+#pragma clang diagnostic pop
+}
+