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 
  11 static 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  */