The test Waddress-space-strict made assumptions about the relative size of integers & pointers. Since this test was crafted on a 64-bit machine, the test was running fine for LP64 but failed on a 32-bit machine (or anything using IP32, like using the -m32 option). However, since the test is about conversion of address-spaces, using integers of different size adds no value, and indeed brings problems. Fix this by limiting the conversions to a single integer type, the one with the same size as pointers on ILP32 & LP64: long. Reported-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- validation/Waddress-space-strict.c | 33 +++++++----------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/validation/Waddress-space-strict.c b/validation/Waddress-space-strict.c index 5071aab26..871da282a 100644 --- a/validation/Waddress-space-strict.c +++ b/validation/Waddress-space-strict.c @@ -1,33 +1,22 @@ #define __user __attribute__((address_space(1))) typedef unsigned long ulong; -typedef long long llong; typedef struct s obj_t; -static void expl(int i, ulong u, llong l, void *v, obj_t *o, obj_t __user *p) +static void expl(ulong u, void *v, obj_t *o, obj_t __user *p) { - (obj_t*)(i); - (obj_t __user*)(i); - (obj_t*)(u); (obj_t __user*)(u); - (obj_t*)(l); - (obj_t __user*)(l); - (obj_t*)(v); (obj_t __user*)(v); - (int)(o); (ulong)(o); - (llong)(o); (void *)(o); (obj_t*)(o); (obj_t __user*)(o); - (int)(p); // w (ulong)(p); // w! - (llong)(p); // w (void *)(p); // w (obj_t*)(p); // w (obj_t __user*)(p); // ok @@ -38,19 +27,11 @@ static void expl(int i, ulong u, llong l, void *v, obj_t *o, obj_t __user *p) * check-command: sparse -Wcast-from-as -Wcast-to-as $file * * check-error-start -Waddress-space-strict.c:10:10: warning: cast adds address space to expression (<asn:1>) -Waddress-space-strict.c:13:10: warning: cast adds address space to expression (<asn:1>) -Waddress-space-strict.c:16:10: warning: cast adds address space to expression (<asn:1>) -Waddress-space-strict.c:19:10: warning: cast adds address space to expression (<asn:1>) -Waddress-space-strict.c:26:10: warning: cast adds address space to expression (<asn:1>) -Waddress-space-strict.c:28:10: warning: cast removes address space of expression -Waddress-space-strict.c:29:10: warning: cast removes address space of expression -Waddress-space-strict.c:30:10: warning: cast removes address space of expression -Waddress-space-strict.c:31:10: warning: cast removes address space of expression -Waddress-space-strict.c:32:10: warning: cast removes address space of expression -Waddress-space-strict.c:9:18: warning: non size-preserving integer to pointer cast -Waddress-space-strict.c:10:25: warning: non size-preserving integer to pointer cast -Waddress-space-strict.c:21:15: warning: non size-preserving pointer to integer cast -Waddress-space-strict.c:28:15: warning: non size-preserving pointer to integer cast +Waddress-space-strict.c:9:10: warning: cast adds address space to expression (<asn:1>) +Waddress-space-strict.c:12:10: warning: cast adds address space to expression (<asn:1>) +Waddress-space-strict.c:17:10: warning: cast adds address space to expression (<asn:1>) +Waddress-space-strict.c:19:10: warning: cast removes address space of expression +Waddress-space-strict.c:20:10: warning: cast removes address space of expression +Waddress-space-strict.c:21:10: warning: cast removes address space of expression * check-error-end */ -- 2.18.0