aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/Waddress-space-from.c
blob: 317a205b6c63afef5c9510c22c271267875357bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#define __kernel __attribute__((address_space(0)))
#define __user   __attribute__((address_space(__user)))
#define __iomem  __attribute__((address_space(__iomem)))
#define __percpu __attribute__((address_space(__percpu)))
#define __rcu    __attribute__((address_space(__rcu)))


typedef struct s obj_t;

static void expl(obj_t __kernel *k, obj_t __iomem *o,
		 obj_t __user *p, obj_t __percpu *pc,
		 obj_t __rcu *r)
{
	(__UINTPTR_TYPE__)(k);	// OK
	(unsigned long)(k);	// OK
	(void *)(k);		// OK
	(obj_t*)(k);		// OK
	(obj_t __kernel*)(k);	// OK

	(__UINTPTR_TYPE__)(o);	// OK
	(unsigned long)(o);	// OK
	(void *)(o);
	(obj_t*)(o);
	(obj_t __iomem*)(o);	// OK

	(__UINTPTR_TYPE__)(p);	// OK
	(unsigned long)(p);	// OK
	(void *)(p);
	(obj_t*)(p);
	(obj_t __user*)(p);	// OK

	(__UINTPTR_TYPE__)(pc);	// OK
	(unsigned long)(pc);	// OK
	(void *)(pc);
	(obj_t*)(pc);
	(obj_t __percpu*)(pc);	// OK

	(__UINTPTR_TYPE__)(r);	// OK
	(unsigned long)(r);	// OK
	(void *)(r);
	(obj_t*)(r);
	(obj_t __rcu*)(r);	// OK
}

/*
 * check-name: Waddress-space-from
 * check-command: sparse -Wno-cast-from-as $file
 * check-description: Test the removal of AS from a pointer but only
 *	in the non-strict variant where casts to ulong (or uintptr_t)
 *	are allowed.
 *
 * check-error-start
Waddress-space-from.c:23:10: warning: cast removes address space '__iomem' of expression
Waddress-space-from.c:24:10: warning: cast removes address space '__iomem' of expression
Waddress-space-from.c:29:10: warning: cast removes address space '__user' of expression
Waddress-space-from.c:30:10: warning: cast removes address space '__user' of expression
Waddress-space-from.c:35:10: warning: cast removes address space '__percpu' of expression
Waddress-space-from.c:36:10: warning: cast removes address space '__percpu' of expression
Waddress-space-from.c:41:10: warning: cast removes address space '__rcu' of expression
Waddress-space-from.c:42:10: warning: cast removes address space '__rcu' of expression
 * check-error-end
 */