/* 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);
}
