1 
   2 
   3 void test(void (*fun)(void));
   4 void test(void (*fun)(void))
   5 {
   6         typedef typeof(__builtin_trap) t;       // OK
   7         void (*f)(void);
   8         int i;
   9 
  10         f =  __builtin_trap;
  11         f = &__builtin_trap;
  12         f = *__builtin_trap;                    // OK for GCC
  13         f =  __builtin_trap + 0;
  14         f =  __builtin_trap + 1;
  15         f =  __builtin_trap - 1;
  16 
  17         // (void) __builtin_trap;
  18         f = (void*) __builtin_trap;
  19         f = (unsigned long) __builtin_trap;
  20 
  21         i = !__builtin_trap;
  22         i = (__builtin_trap > fun);
  23         i = (__builtin_trap == fun);
  24         i = (fun <  __builtin_trap);
  25         i = (fun == __builtin_trap);
  26 
  27         __builtin_trap - fun;
  28         fun - __builtin_trap;
  29 }
  30 
  31 /*
  32  * check-name: builtin arithmetic
  33  * check-command: sparse -Wno-decl $file
  34  * check-known-to-fail
  35  *
  36  * check-error-start
  37 builtin-arith.c:10:xx: error: ...
  38 builtin-arith.c:11:xx: error: ...
  39 builtin-arith.c:13:xx: error: arithmetics on pointers to functions
  40 builtin-arith.c:14:xx: error: arithmetics on pointers to functions
  41 builtin-arith.c:15:xx: error: arithmetics on pointers to functions
  42 builtin-arith.c:18:xx: error: ...
  43 builtin-arith.c:19:xx: error: ...
  44 builtin-arith.c:21:xx: error: ...
  45 builtin-arith.c:22:xx: error: ...
  46 builtin-arith.c:23:xx: error: ...
  47 builtin-arith.c:24:xx: error: ...
  48 builtin-arith.c:25:xx: error: ...
  49 builtin-arith.c:27:24: error: subtraction of functions? Share your drugs
  50 builtin-arith.c:28:13: error: subtraction of functions? Share your drugs
  51  * check-error-end
  52  */