#define PAD_SIZE 16
 #define FILL_CHAR '$'
 
+#define NOWARN(option, comment, block) \
+       __diag_push(); \
+       __diag_ignore_all(#option, comment); \
+       block \
+       __diag_pop();
+
 KSTM_MODULE_GLOBALS();
 
 static char *test_buffer __initdata;
        test("0x1234abcd  ", "%#-12x", 0x1234abcd);
        test("  0x1234abcd", "%#12x", 0x1234abcd);
        test("0|001| 12|+123| 1234|-123|-1234", "%d|%03d|%3d|%+d|% d|%+d|% d", 0, 1, 12, 123, 1234, -123, -1234);
-       test("0|1|1|128|255", "%hhu|%hhu|%hhu|%hhu|%hhu", 0, 1, 257, 128, -1);
-       test("0|1|1|-128|-1", "%hhd|%hhd|%hhd|%hhd|%hhd", 0, 1, 257, 128, -1);
-       test("2015122420151225", "%ho%ho%#ho", 1037, 5282, -11627);
+       NOWARN(-Wformat, "Intentionally test narrowing conversion specifiers.", {
+               test("0|1|1|128|255", "%hhu|%hhu|%hhu|%hhu|%hhu", 0, 1, 257, 128, -1);
+               test("0|1|1|-128|-1", "%hhd|%hhd|%hhd|%hhd|%hhd", 0, 1, 257, 128, -1);
+               test("2015122420151225", "%ho%ho%#ho", 1037, 5282, -11627);
+       })
        /*
         * POSIX/C99: »The result of converting zero with an explicit
         * precision of zero shall be no characters.« Hence the output