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