(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
c2x-empty-init-1.c
       1  /* Test C2X support for empty initializers: valid use cases.  */
       2  /* { dg-do run } */
       3  /* { dg-options "-std=c2x -pedantic-errors" } */
       4  
       5  extern void exit (int);
       6  extern void abort (void);
       7  
       8  struct s { int a; };
       9  struct s s = {};
      10  int x = {};
      11  float y = {};
      12  void *p = {};
      13  union u { int a; long b; };
      14  union u z = {};
      15  int aa[2] = {};
      16  
      17  void
      18  f (int a)
      19  {
      20    volatile int vla[a] = {};
      21    struct s as = {};
      22    int ax = {};
      23    float ay = {};
      24    void *ap = {};
      25    union u az = {};
      26    int aaa[2] = {};
      27    for (int i = 0; i < a; i++)
      28      if (vla[i] != 0)
      29        abort ();
      30    if (as.a != 0)
      31      abort ();
      32    if (ax != 0)
      33      abort ();
      34    if (ay != 0)
      35      abort ();
      36    if (ap != 0)
      37      abort ();
      38    if (az.a != 0)
      39      abort ();
      40    if (aaa[0] != 0)
      41      abort ();
      42    if (aaa[1] != 0)
      43      abort ();
      44    if ((int) {} != 0)
      45      abort ();
      46    if ((float) {} != 0)
      47      abort ();
      48    if ((struct s) {}.a != 0)
      49      abort ();
      50    if ((union u) {}.a != 0)
      51      abort ();
      52    if ((int [5]) {}[2] != 0)
      53      abort ();
      54    /* Overwrite contents of vla before second call to make it more likely stack
      55       contents are nonzero if proper initialization did not occur.  */
      56    for (int i = 0; i < a; i++)
      57      vla[i] = -1;
      58  }
      59  
      60  int
      61  main (void)
      62  {
      63    f (100);
      64    f (100);
      65    if (s.a != 0)
      66      abort ();
      67    if (x != 0)
      68      abort ();
      69    if (y != 0)
      70      abort ();
      71    if (p != 0)
      72      abort ();
      73    if (z.a != 0)
      74      abort ();
      75    if (aa[0] != 0)
      76      abort ();
      77    if (aa[1] != 0)
      78      abort ();
      79    exit (0);
      80  }