printf: convert test_hashed into macro

This allows the compiler to check the arguments against the __printf()
attribute on __test(). This produces better diagnostics when incorrect
inputs are passed.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512061600.89CKQ3ag-lkp@intel.com/
Signed-off-by: Tamir Duberstein <tamird@kernel.org>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/20260121-printf-kunit-printf-attr-v3-1-4144f337ec8b@kernel.org
Signed-off-by: Petr Mladek <pmladek@suse.com>
This commit is contained in:
Tamir Duberstein 2026-01-21 11:10:08 -05:00 committed by Petr Mladek
parent bdfcca65e7
commit 9bfa52dac2

View File

@ -266,15 +266,17 @@ hash_pointer(struct kunit *kunittest)
KUNIT_EXPECT_MEMNEQ(kunittest, buf, PTR_STR, PTR_WIDTH); KUNIT_EXPECT_MEMNEQ(kunittest, buf, PTR_STR, PTR_WIDTH);
} }
static void /*
test_hashed(struct kunit *kunittest, const char *fmt, const void *p) * This is a macro so that the compiler can compare its arguments to the
{ * __printf() attribute on __test(). This cannot be a function with a __printf()
char buf[PLAIN_BUF_SIZE]; * attribute because GCC requires __printf() functions to be variadic.
*/
plain_hash_to_buffer(kunittest, p, buf, PLAIN_BUF_SIZE); #define test_hashed(kunittest, fmt, p) \
do { \
test(buf, fmt, p); char buf[PLAIN_BUF_SIZE]; \
} plain_hash_to_buffer(kunittest, p, buf, PLAIN_BUF_SIZE); \
test(buf, fmt, p); \
} while (0)
/* /*
* NULL pointers aren't hashed. * NULL pointers aren't hashed.