1 #define __user          __attribute__((address_space(1)))
   2 #define __safe          __attribute__((safe))
   3 #define __nocast        __attribute__((nocast))
   4 #define __bitwise       __attribute__((bitwise))
   5 #define __noderef       __attribute__((noderef))
   6 
   7 int test(void)
   8 {
   9         if ([int] != [int]) return 1;
  10         if (!([int] == [int])) return 1;
  11 
  12         if ([int] == [long]) return 1;
  13         if (!([int] != [long])) return 1;
  14 
  15         if ([int] == [unsigned int]) return 1;
  16         if (!([int] != [unsigned int])) return 1;
  17 
  18         if ([int] != [int]) return 1;
  19         if ([typeof(int)] != [int]) return 1;
  20         if ([int] != [typeof(int)]) return 1;
  21         if ([typeof(int)] != [typeof(int)]) return 1;
  22 
  23         if ([char] > [short]) return 1;
  24         if ([short] < [char]) return 1;
  25         if (!([char] <= [short])) return 1;
  26         if (!([short] >= [char])) return 1;
  27 
  28         if ([short] > [int]) return 1;
  29         if ([int] < [short]) return 1;
  30         if (!([short] <= [int])) return 1;
  31         if (!([int] >= [short])) return 1;
  32 
  33         if ([int] > [long]) return 1;
  34         if ([long] < [int]) return 1;
  35         if (!([int] <= [long])) return 1;
  36         if (!([long] >= [int])) return 1;
  37 
  38         if ([long] > [long long]) return 1;
  39         if ([long long] < [long]) return 1;
  40         if (!([long] <= [long long])) return 1;
  41         if (!([long long] >= [long])) return 1;
  42 
  43         if ([int *] != [int *]) return 1;
  44         if ([int *] == [void *]) return 1;
  45 
  46         // qualifiers are ignored
  47         if ([int] != [const int]) return 1;
  48         if ([int] != [volatile int]) return 1;
  49 
  50         // but others modifiers are significant
  51         if ([int] == [int __nocast]) return 1;
  52         if ([int] == [int __bitwise]) return 1;
  53 
  54         //
  55         if ([int *] == [const int *]) return 1;
  56         if ([int *] == [volatile int *]) return 1;
  57         if ([int *] == [int __user *]) return 1;
  58         if ([int *] == [int __safe *]) return 1;
  59         if ([int *] == [int __nocast *]) return 1;
  60         if ([int *] == [int __bitwise *]) return 1;
  61         if ([int *] == [int __noderef *]) return 1;
  62 
  63         return 0;
  64 }
  65 
  66 /*
  67  * check-name: type-as-first-class comparison
  68  * check-description: This test the sparse extension making
  69  *      types first class citizens which can be compared
  70  *      for equality (or size for <, >, <=, >=).
  71  *      See expand.c:compare_types().
  72  * check-command: test-linearize -Wno-decl $file
  73  * check-output-ignore
  74  *
  75  * check-output-contains: ret\\..*\\$0
  76  */