blob: dcca5e8d34852dc8e410eb72eb84bed56077c7e3 [file] [log] [blame]
/* Test C2x storage class specifiers in compound literals. */
/* { dg-do run } */
/* { dg-options "-std=c2x -pedantic-errors" } */
#include <stddef.h>
extern void abort (void);
extern void exit (int);
/* static is OK (although redundant) at file scope. */
int *ps = &(static int) { 1 };
size_t ss = sizeof (static int) { 1 };
int *psa = (static int [3]) { 1, 2, 3 };
int
main ()
{
if (ps[0] != 1)
abort ();
if (ss != sizeof (int))
abort ();
if (psa[0] != 1 || psa[1] != 2 || psa[2] != 3)
abort ();
if ((register int) { 3 } != 3)
abort ();
/* A static compound literal, like a static variable, is initialized once,
but an automatic compound literal is initialized every time it is reached
in the order of execution. */
int i = 0;
lab:
int *p = &(static int) { 0 };
if (*p != i)
abort ();
i++;
*p = i;
if (i < 5)
goto lab;
i = 0;
lab2:
int *p2 = &(int) { 0 };
if (*p2 != 0)
abort ();
i++;
*p2 = i;
if (i < 5)
goto lab2;
exit (0);
}