1f08c3bdfSopenharmony_ci// credit goes to Martin Uecker for the awesome ICE_P macro 2f08c3bdfSopenharmony_ci 3f08c3bdfSopenharmony_ci#define ICE_P(x) \ 4f08c3bdfSopenharmony_ci (__builtin_types_compatible_p(typeof(0?((void*)((long)(x)*0l)):(int*)1),int*)) 5f08c3bdfSopenharmony_ci 6f08c3bdfSopenharmony_ci#define T(x) __builtin_choose_expr(ICE_P(x), 1, 0) 7f08c3bdfSopenharmony_ci#define TEST(x, r) _Static_assert(T(x) == r, #x " => " #r) 8f08c3bdfSopenharmony_ci 9f08c3bdfSopenharmony_cistatic void test(int n) 10f08c3bdfSopenharmony_ci{ 11f08c3bdfSopenharmony_ci char foo[n++]; 12f08c3bdfSopenharmony_ci 13f08c3bdfSopenharmony_ci TEST(sizeof(foo), 0); 14f08c3bdfSopenharmony_ci} 15f08c3bdfSopenharmony_ci 16f08c3bdfSopenharmony_ci/* 17f08c3bdfSopenharmony_ci * check-name: vla-sizeof-ice 18f08c3bdfSopenharmony_ci * check-command: sparse -Wno-vla $file 19f08c3bdfSopenharmony_ci */ 20