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