/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:770:49:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
770 | uintmax_t __exp_print = (uintmax_t)__exp; \
| ^
/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:530:9:
note: in expansion of macro '__EXPECT'
530 | __EXPECT(expected, #expected, seen, #seen, !=, 1)
| ^~~~~~~~
test-pcmtest-driver.c:137:9: note: in expansion of macro 'ASSERT_NE'
137 | ASSERT_NE(card_name, NULL);
| ^~~~~~~~~
/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:771:50:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
771 | uintmax_t __seen_print = (uintmax_t)__seen; \
| ^
/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:530:9:
note: in expansion of macro '__EXPECT'
530 | __EXPECT(expected, #expected, seen, #seen, !=, 1)
| ^~~~~~~~
test-pcmtest-driver.c:137:9: note: in expansion of macro 'ASSERT_NE'
137 | ASSERT_NE(card_name, NULL);
| ^~~~~~~~~
...
Those warnings were fixed by commit b5bb6d3068ea ("selftests/seccomp:
fix 32-bit build warnings") but then reintroduced by
commit 02bc220dc6dc ("selftests: harness: fix printing of mismatch
values in __EXPECT()")
Fix them for good this time, without re-introducing the printing
mismatch.
Fixes: 02bc220dc6dc ("selftests: harness: fix printing of mismatch values in
__EXPECT()")
Signed-off-by: Christophe Leroy (CS GROUP) <[email protected]>
---
tools/testing/selftests/kselftest_harness.h | 37 ++++++++++++---------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/tools/testing/selftests/kselftest_harness.h
b/tools/testing/selftests/kselftest_harness.h
index 16a119a4656c7..80a81f96fd5bf 100644
--- a/tools/testing/selftests/kselftest_harness.h
+++ b/tools/testing/selftests/kselftest_harness.h
@@ -759,6 +759,11 @@ static inline void __kselftest_memset_safe(void *s, int c,
size_t n)
#define is_signed_var(var) (!!(((__typeof__(var))(-1)) <
(__typeof__(var))1))
+#define __ulong_type(x) \
+ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+#define __long_type(x) \
+ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0L), 0LL, 0L))
+
#define __EXPECT(_expected, _expected_str, _seen, _seen_str, _t, _assert) do {
\
/* Avoid multiple evaluation of the cases */ \
__typeof__(_expected) __exp = (_expected); \
@@ -767,35 +772,35 @@ static inline void __kselftest_memset_safe(void *s, int
c, size_t n)
/* Report with actual signedness to avoid weird output. */ \
switch (is_signed_var(__exp) * 2 + is_signed_var(__seen)) { \
case 0: { \
- uintmax_t __exp_print = (uintmax_t)__exp; \
- uintmax_t __seen_print = (uintmax_t)__seen; \
+ __ulong_type(__exp) __exp_print =
(__ulong_type(__exp))__exp; \
+ __ulong_type(__seen) __seen_print =
(__ulong_type(__seen))__seen; \
__TH_LOG("Expected %s (%ju) %s %s (%ju)", \
- _expected_str, __exp_print, #_t, \
- _seen_str, __seen_print); \
+ _expected_str, (uintmax_t)__exp_print, #_t, \
+ _seen_str, (uintmax_t)__seen_print); \
break; \
} \
case 1: { \
- uintmax_t __exp_print = (uintmax_t)__exp; \
- intmax_t __seen_print = (intmax_t)__seen; \
+ __ulong_type(__exp) __exp_print =
(__ulong_type(__exp))__exp; \
+ __long_type(__seen) __seen_print =
(__long_type(__seen))__seen; \
__TH_LOG("Expected %s (%ju) %s %s (%jd)", \
- _expected_str, __exp_print, #_t, \
- _seen_str, __seen_print); \
+ _expected_str, (uintmax_t)__exp_print, #_t, \
+ _seen_str, (intmax_t)__seen_print); \
break; \
} \
case 2: { \
- intmax_t __exp_print = (intmax_t)__exp; \
- uintmax_t __seen_print = (uintmax_t)__seen; \
+ __long_type(__exp) __exp_print =
(__long_type(__exp))__exp; \
+ __ulong_type(__seen) __seen_print =
(__ulong_type(__seen))__seen; \
__TH_LOG("Expected %s (%jd) %s %s (%ju)", \
- _expected_str, __exp_print, #_t, \
- _seen_str, __seen_print); \
+ _expected_str, (intmax_t)__exp_print, #_t, \
+ _seen_str, (uintmax_t)__seen_print); \
break; \
} \
case 3: { \
- intmax_t __exp_print = (intmax_t)__exp; \
- intmax_t __seen_print = (intmax_t)__seen; \
+ __long_type(__exp) __exp_print =
(__long_type(__exp))__exp; \
+ __long_type(__seen) __seen_print =
(__long_type(__seen))__seen; \
__TH_LOG("Expected %s (%jd) %s %s (%jd)", \
- _expected_str, __exp_print, #_t, \
- _seen_str, __seen_print); \
+ _expected_str, (intmax_t)__exp_print, #_t, \
+ _seen_str, (intmax_t)__seen_print); \
break; \
} \
} \
--
2.49.0