/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


Reply via email to