1 #define __noderef       __attribute__((noderef))
   2 #define __bitwise       __attribute__((bitwise))
   3 #define __nocast        __attribute__((nocast))
   4 #define __safe          __attribute__((safe))
   5 
   6 static void test_spec(void)
   7 {
   8         unsigned int obj, *ptr;
   9         typeof(obj) var = obj;
  10         typeof(ptr) ptr2 = ptr;
  11         typeof(*ptr) var2 = obj;
  12         typeof(*ptr) *ptr3 = ptr;
  13         typeof(obj) *ptr4 = ptr;
  14         obj = obj;
  15         ptr = ptr;
  16         ptr = &obj;
  17         obj = *ptr;
  18 }
  19 
  20 static void test_const(void)
  21 {
  22         const int obj, *ptr;
  23         typeof(obj) var = obj;
  24         typeof(ptr) ptr2 = ptr;
  25         typeof(*ptr) var2 = obj;
  26         typeof(*ptr) *ptr3 = ptr;
  27         typeof(obj) *ptr4 = ptr;
  28         ptr = ptr;
  29         ptr = &obj;
  30 }
  31 
  32 static void test_volatile(void)
  33 {
  34         volatile int obj, *ptr;
  35         typeof(obj) var = obj;
  36         typeof(ptr) ptr2 = ptr;
  37         typeof(*ptr) var2 = obj;
  38         typeof(*ptr) *ptr3 = ptr;
  39         typeof(obj) *ptr4 = ptr;
  40         obj = obj;
  41         ptr = ptr;
  42         ptr = &obj;
  43         obj = *ptr;
  44 }
  45 
  46 static void test_restrict(void)
  47 {
  48         int *restrict obj, *restrict *ptr;
  49         typeof(obj) var = obj;
  50         typeof(ptr) ptr2 = ptr;
  51         typeof(*ptr) var2 = obj;
  52         typeof(*ptr) *ptr3 = ptr;
  53         typeof(obj) *ptr4 = ptr;
  54         obj = obj;
  55         ptr = ptr;
  56         ptr = &obj;
  57         obj = *ptr;
  58 }
  59 
  60 static void test_atomic(void)
  61 {
  62         int _Atomic obj, *ptr;
  63         typeof(obj) var = obj;
  64         typeof(ptr) ptr2 = ptr;
  65         typeof(*ptr) var2 = obj;
  66         typeof(*ptr) *ptr3 = ptr;
  67         typeof(obj) *ptr4 = ptr;
  68         obj = obj;
  69         ptr = ptr;
  70         ptr = &obj;
  71         obj = *ptr;
  72 }
  73 
  74 static void test_bitwise(void)
  75 {
  76         typedef int __bitwise type_t;
  77         type_t obj, *ptr;
  78         typeof(obj) var = obj;
  79         typeof(ptr) ptr2 = ptr;
  80         typeof(*ptr) var2 = obj;
  81         typeof(*ptr) *ptr3 = ptr;
  82         typeof(obj) *ptr4 = ptr;
  83         obj = obj;
  84         ptr = ptr;
  85         ptr = &obj;
  86         obj = *ptr;
  87 }
  88 
  89 static void test_static(void)
  90 {
  91         static int obj, *ptr;
  92         typeof(obj) var = obj;
  93         typeof(ptr) ptr2 = ptr;
  94         typeof(*ptr) var2 = obj;
  95         typeof(*ptr) *ptr3 = ptr;
  96         typeof(obj) *ptr4 = ptr;
  97         obj = obj;
  98         ptr = ptr;
  99         ptr = &obj;
 100         obj = *ptr;
 101 }
 102 
 103 static void test_tls(void)
 104 {
 105         __thread int obj, *ptr;
 106         typeof(obj) var = obj;
 107         typeof(ptr) ptr2 = ptr;
 108         typeof(*ptr) var2 = obj;
 109         typeof(*ptr) *ptr3 = ptr;
 110         typeof(obj) *ptr4 = ptr;
 111         obj = obj;
 112         ptr = ptr;
 113         ptr = &obj;
 114         obj = *ptr;
 115 }
 116 
 117 static void test_nocast(void)
 118 {
 119         int __nocast obj, *ptr;
 120         typeof(obj) var = obj;
 121         typeof(ptr) ptr2 = ptr;
 122         typeof(*ptr) var2 = obj;
 123         typeof(*ptr) *ptr3 = ptr;
 124         typeof(obj) *ptr4 = ptr;
 125         obj = obj;
 126         ptr = ptr;
 127         ptr = &obj;
 128         obj = *ptr;
 129 }
 130 
 131 /*
 132  * check-name: typeof-mods
 133  *
 134  * check-error-start
 135  * check-error-end
 136  */