/* { dg-do run } */ /* { dg-options "-std=c2y -pedantic-errors" } */ #define assert(e) ((e) ? (void) 0 : __builtin_abort ()) void array (void) { short a[7]; static_assert (_Countof (a) == 7); static_assert (_Countof (unsigned [99]) == 99); } void completed (void) { int a[] = {1, 2, 3}; static_assert (_Countof (a) == 3); } void vla (void) { unsigned n; n = 99; assert (_Countof (short [n - 10]) == 99 - 10); int v[n / 2]; assert (_Countof (v) == 99 / 2); } void member (void) { struct { int a[8]; } s; static_assert (_Countof (s.a) == 8); } void vla_eval (void) { int i; i = 7; assert (_Countof (struct {int x;}[i++]) == 7); assert (i == 7 + 1); int v[i]; int (*p)[i]; p = &v; assert (_Countof (*p++) == i); assert (p - 1 == &v); } void array_noeval (void) { long a[5]; long (*p)[_Countof (a)]; p = &a; static_assert (_Countof (*p++) == 5); assert (p == &a); } void matrix_fixed (void) { int i; static_assert (_Countof (int [7][4]) == 7); i = 3; static_assert (_Countof (int [7][i]) == 7); } void matrix_vla (void) { int i, j; i = 7; assert (_Countof (int [i++][4]) == 7); assert (i == 7 + 1); i = 9; j = 3; assert (_Countof (int [i++][j]) == 9); assert (i == 9 + 1); } void no_parens(void) { int n = 3; int a[7]; int v[n]; static_assert (_Countof a == 7); assert (_Countof v == 3); } int main (void) { array (); completed (); vla (); member (); vla_eval (); array_noeval (); matrix_fixed (); matrix_vla (); no_parens (); }