1 #define __user __attribute__((address_space(1))) 2 3 typedef unsigned long ulong; 4 typedef struct s obj_t; 5 expl(ulong u,void * v,obj_t * o,obj_t __user * p)6static void expl(ulong u, void *v, obj_t *o, obj_t __user *p) 7 { 8 (obj_t*)(u); 9 (obj_t __user*)(u); 10 11 (obj_t*)(v); 12 (obj_t __user*)(v); 13 14 (ulong)(o); 15 (void *)(o); 16 (obj_t*)(o); 17 (obj_t __user*)(o); 18 19 (ulong)(p); // w! 20 (void *)(p); // w 21 (obj_t*)(p); // w 22 (obj_t __user*)(p); // ok 23 } 24 25 /* 26 * check-name: Waddress-space-strict 27 * check-command: sparse -Wcast-from-as -Wcast-to-as $file 28 * 29 * check-error-start 30 Waddress-space-strict.c:12:10: warning: cast adds address space '<asn:1>' to expression 31 Waddress-space-strict.c:17:10: warning: cast adds address space '<asn:1>' to expression 32 Waddress-space-strict.c:19:10: warning: cast removes address space '<asn:1>' of expression 33 Waddress-space-strict.c:20:10: warning: cast removes address space '<asn:1>' of expression 34 Waddress-space-strict.c:21:10: warning: cast removes address space '<asn:1>' of expression 35 * check-error-end 36 */ 37