11f5207b7SJohn Levon #define	__noderef	__attribute__((noderef))
21f5207b7SJohn Levon #define	__bitwise	__attribute__((bitwise))
31f5207b7SJohn Levon #define	__nocast	__attribute__((nocast))
41f5207b7SJohn Levon #define	__safe		__attribute__((safe))
51f5207b7SJohn Levon 
test_spec(void)61f5207b7SJohn Levon static void test_spec(void)
71f5207b7SJohn Levon {
81f5207b7SJohn Levon 	unsigned int obj, *ptr;
91f5207b7SJohn Levon 	typeof(obj) var = obj;
101f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
111f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
121f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
131f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
141f5207b7SJohn Levon 	obj = obj;
151f5207b7SJohn Levon 	ptr = ptr;
161f5207b7SJohn Levon 	ptr = &obj;
171f5207b7SJohn Levon 	obj = *ptr;
181f5207b7SJohn Levon }
191f5207b7SJohn Levon 
test_const(void)201f5207b7SJohn Levon static void test_const(void)
211f5207b7SJohn Levon {
221f5207b7SJohn Levon 	const int obj, *ptr;
231f5207b7SJohn Levon 	typeof(obj) var = obj;
241f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
251f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
261f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
271f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
281f5207b7SJohn Levon 	ptr = ptr;
291f5207b7SJohn Levon 	ptr = &obj;
301f5207b7SJohn Levon }
311f5207b7SJohn Levon 
test_volatile(void)321f5207b7SJohn Levon static void test_volatile(void)
331f5207b7SJohn Levon {
341f5207b7SJohn Levon 	volatile int obj, *ptr;
351f5207b7SJohn Levon 	typeof(obj) var = obj;
361f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
371f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
381f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
391f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
401f5207b7SJohn Levon 	obj = obj;
411f5207b7SJohn Levon 	ptr = ptr;
421f5207b7SJohn Levon 	ptr = &obj;
431f5207b7SJohn Levon 	obj = *ptr;
441f5207b7SJohn Levon }
451f5207b7SJohn Levon 
test_restrict(void)46*c85f09ccSJohn Levon static void test_restrict(void)
47*c85f09ccSJohn Levon {
48*c85f09ccSJohn Levon 	int *restrict obj, *restrict *ptr;
49*c85f09ccSJohn Levon 	typeof(obj) var = obj;
50*c85f09ccSJohn Levon 	typeof(ptr) ptr2 = ptr;
51*c85f09ccSJohn Levon 	typeof(*ptr) var2 = obj;
52*c85f09ccSJohn Levon 	typeof(*ptr) *ptr3 = ptr;
53*c85f09ccSJohn Levon 	typeof(obj) *ptr4 = ptr;
54*c85f09ccSJohn Levon 	obj = obj;
55*c85f09ccSJohn Levon 	ptr = ptr;
56*c85f09ccSJohn Levon 	ptr = &obj;
57*c85f09ccSJohn Levon 	obj = *ptr;
58*c85f09ccSJohn Levon }
59*c85f09ccSJohn Levon 
test_atomic(void)60*c85f09ccSJohn Levon static void test_atomic(void)
61*c85f09ccSJohn Levon {
62*c85f09ccSJohn Levon 	int _Atomic obj, *ptr;
63*c85f09ccSJohn Levon 	typeof(obj) var = obj;
64*c85f09ccSJohn Levon 	typeof(ptr) ptr2 = ptr;
65*c85f09ccSJohn Levon 	typeof(*ptr) var2 = obj;
66*c85f09ccSJohn Levon 	typeof(*ptr) *ptr3 = ptr;
67*c85f09ccSJohn Levon 	typeof(obj) *ptr4 = ptr;
68*c85f09ccSJohn Levon 	obj = obj;
69*c85f09ccSJohn Levon 	ptr = ptr;
70*c85f09ccSJohn Levon 	ptr = &obj;
71*c85f09ccSJohn Levon 	obj = *ptr;
72*c85f09ccSJohn Levon }
73*c85f09ccSJohn Levon 
test_bitwise(void)741f5207b7SJohn Levon static void test_bitwise(void)
751f5207b7SJohn Levon {
761f5207b7SJohn Levon 	typedef int __bitwise type_t;
771f5207b7SJohn Levon 	type_t obj, *ptr;
781f5207b7SJohn Levon 	typeof(obj) var = obj;
791f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
801f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
811f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
821f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
831f5207b7SJohn Levon 	obj = obj;
841f5207b7SJohn Levon 	ptr = ptr;
851f5207b7SJohn Levon 	ptr = &obj;
861f5207b7SJohn Levon 	obj = *ptr;
871f5207b7SJohn Levon }
881f5207b7SJohn Levon 
test_static(void)891f5207b7SJohn Levon static void test_static(void)
901f5207b7SJohn Levon {
911f5207b7SJohn Levon 	static int obj, *ptr;
921f5207b7SJohn Levon 	typeof(obj) var = obj;
931f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
941f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
951f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
961f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
971f5207b7SJohn Levon 	obj = obj;
981f5207b7SJohn Levon 	ptr = ptr;
991f5207b7SJohn Levon 	ptr = &obj;
1001f5207b7SJohn Levon 	obj = *ptr;
1011f5207b7SJohn Levon }
1021f5207b7SJohn Levon 
test_tls(void)1031f5207b7SJohn Levon static void test_tls(void)
1041f5207b7SJohn Levon {
1051f5207b7SJohn Levon 	__thread int obj, *ptr;
1061f5207b7SJohn Levon 	typeof(obj) var = obj;
1071f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
1081f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
1091f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
1101f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
1111f5207b7SJohn Levon 	obj = obj;
1121f5207b7SJohn Levon 	ptr = ptr;
1131f5207b7SJohn Levon 	ptr = &obj;
1141f5207b7SJohn Levon 	obj = *ptr;
1151f5207b7SJohn Levon }
1161f5207b7SJohn Levon 
test_nocast(void)1171f5207b7SJohn Levon static void test_nocast(void)
1181f5207b7SJohn Levon {
1191f5207b7SJohn Levon 	int __nocast obj, *ptr;
1201f5207b7SJohn Levon 	typeof(obj) var = obj;
1211f5207b7SJohn Levon 	typeof(ptr) ptr2 = ptr;
1221f5207b7SJohn Levon 	typeof(*ptr) var2 = obj;
1231f5207b7SJohn Levon 	typeof(*ptr) *ptr3 = ptr;
1241f5207b7SJohn Levon 	typeof(obj) *ptr4 = ptr;
1251f5207b7SJohn Levon 	obj = obj;
1261f5207b7SJohn Levon 	ptr = ptr;
1271f5207b7SJohn Levon 	ptr = &obj;
1281f5207b7SJohn Levon 	obj = *ptr;
1291f5207b7SJohn Levon }
1301f5207b7SJohn Levon 
1311f5207b7SJohn Levon /*
1321f5207b7SJohn Levon  * check-name: typeof-mods
1331f5207b7SJohn Levon  *
1341f5207b7SJohn Levon  * check-error-start
1351f5207b7SJohn Levon  * check-error-end
1361f5207b7SJohn Levon  */
137