1 #define is_constexpr(x) \
   2         (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8)))
   3 
   4 static int test(void)
   5 {
   6         unsigned int s = 0, i = 0;
   7         void *ptr = &i;
   8 
   9         // OK
  10         s += sizeof i;
  11         s += sizeof &i;
  12         s += sizeof ptr;
  13         s += sizeof &ptr;
  14 
  15         // KO
  16         s += sizeof(void);
  17         s += sizeof *ptr;
  18         s += is_constexpr(ptr++);
  19         s += is_constexpr((i++, 1));
  20         s += is_constexpr(sizeof *ptr);
  21         s += is_constexpr(ptr + 1);
  22         s += is_constexpr(&ptr + 1);
  23         s += is_constexpr(*(((char *)&ptr) + 1));
  24 
  25         return s;
  26 }
  27 
  28 /*
  29  * check-name: sizeof(void) is valid
  30  * check-description: sizeof(void) was rejected because void is an incomplete
  31  * type
  32  * check-command: sparse -Wpointer-arith $file
  33  *
  34  * check-error-start
  35 sizeof-void.c:16:14: warning: expression using sizeof(void)
  36 sizeof-void.c:17:14: warning: expression using sizeof(void)
  37 sizeof-void.c:18:14: warning: expression using sizeof(void)
  38 sizeof-void.c:19:14: warning: expression using sizeof(void)
  39 sizeof-void.c:20:14: warning: expression using sizeof(void)
  40 sizeof-void.c:21:14: warning: expression using sizeof(void)
  41 sizeof-void.c:22:14: warning: expression using sizeof(void)
  42 sizeof-void.c:23:14: warning: expression using sizeof(void)
  43  * check-error-end
  44  */