blob: a08097a126bd8ea07c9c266fb5c0b59d234b4c27 [file] [log] [blame]
/* Test C23 constexpr. Valid code, execution test. */
/* { dg-do link } */
/* { dg-options "-std=c23 -pedantic-errors" } */
/* { dg-additional-sources "c23-constexpr-2b.c" } */
extern void abort (void);
extern void exit (int);
/* constexpr objects at file scope have internal linkage. */
constexpr int a = 2;
struct s { int a; float b; int c[3]; };
constexpr struct s s1 = { 2, 3, { 4, 5, 6 } };
constexpr struct s s2 = s1;
struct s s3 = s2;
void
check (const struct s *p)
{
if (p->a != 2 || p->b != 3 || p->c[0] != 4 || p->c[1] != 5 || p->c[2] != 6)
abort ();
}
int
main ()
{
constexpr struct s s4 = s1;
struct s s5 = s4;
constexpr struct s s6 = { s1.a, s2.b, { 4, 5, 6 } };
check (&s1);
check (&s2);
check (&s3);
check (&s4);
check (&s5);
check (&s6);
exit (0);
}