blob: 534488501c6af79ce68ef195d6e1c0a7b61822a0 [file] [log] [blame]
/* { 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 ();
}