1 2 #define __kernel __attribute__((address_space(0))) 3 #define __user __attribute__((address_space(__user))) 4 #define __iomem __attribute__((address_space(__iomem))) 5 #define __percpu __attribute__((address_space(__percpu))) 6 #define __rcu __attribute__((address_space(__rcu))) 7 8 9 typedef struct s obj_t; 10 expl(obj_t __kernel * k,obj_t __iomem * o,obj_t __user * p,obj_t __percpu * pc,obj_t __rcu * r)11static void expl(obj_t __kernel *k, obj_t __iomem *o, 12 obj_t __user *p, obj_t __percpu *pc, 13 obj_t __rcu *r) 14 { 15 (__UINTPTR_TYPE__)(k); // OK 16 (unsigned long)(k); // OK 17 (void *)(k); // OK 18 (obj_t*)(k); // OK 19 (obj_t __kernel*)(k); // OK 20 21 (__UINTPTR_TYPE__)(o); // OK 22 (unsigned long)(o); // OK 23 (void *)(o); 24 (obj_t*)(o); 25 (obj_t __iomem*)(o); // OK 26 27 (__UINTPTR_TYPE__)(p); // OK 28 (unsigned long)(p); // OK 29 (void *)(p); 30 (obj_t*)(p); 31 (obj_t __user*)(p); // OK 32 33 (__UINTPTR_TYPE__)(pc); // OK 34 (unsigned long)(pc); // OK 35 (void *)(pc); 36 (obj_t*)(pc); 37 (obj_t __percpu*)(pc); // OK 38 39 (__UINTPTR_TYPE__)(r); // OK 40 (unsigned long)(r); // OK 41 (void *)(r); 42 (obj_t*)(r); 43 (obj_t __rcu*)(r); // OK 44 } 45 46 /* 47 * check-name: Waddress-space-from 48 * check-command: sparse -Wno-cast-from-as $file 49 * check-description: Test the removal of AS from a pointer but only 50 * in the non-strict variant where casts to ulong (or uintptr_t) 51 * are allowed. 52 * 53 * check-error-start 54 Waddress-space-from.c:23:10: warning: cast removes address space '__iomem' of expression 55 Waddress-space-from.c:24:10: warning: cast removes address space '__iomem' of expression 56 Waddress-space-from.c:29:10: warning: cast removes address space '__user' of expression 57 Waddress-space-from.c:30:10: warning: cast removes address space '__user' of expression 58 Waddress-space-from.c:35:10: warning: cast removes address space '__percpu' of expression 59 Waddress-space-from.c:36:10: warning: cast removes address space '__percpu' of expression 60 Waddress-space-from.c:41:10: warning: cast removes address space '__rcu' of expression 61 Waddress-space-from.c:42:10: warning: cast removes address space '__rcu' of expression 62 * check-error-end 63 */ 64