(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vla-16.c
       1  /* Test for modifying and taking addresses of compound literals whose
       2     variably modified types involve typeof.  */
       3  /* Origin: Joseph Myers <joseph@codesourcery.com> */
       4  /* { dg-do run } */
       5  /* { dg-options "-std=gnu99" } */
       6  
       7  #include <stdarg.h>
       8  
       9  extern void exit (int);
      10  extern void abort (void);
      11  
      12  int a[1];
      13  
      14  void
      15  f1 (void)
      16  {
      17    int i = 0;
      18    int (**p)[1] = &(typeof (++i, (int (*)[i])a)){&a};
      19    if (*p != &a)
      20      abort ();
      21    if (i != 1)
      22      abort ();
      23  }
      24  
      25  void
      26  f2 (void)
      27  {
      28    int i = 0;
      29    (typeof (++i, (int (*)[i])a)){&a} = 0;
      30    if (i != 1)
      31      abort ();
      32  }
      33  
      34  void
      35  f3 (void)
      36  {
      37    int i = 0;
      38    (typeof (++i, (int (*)[i])a)){&a} += 1;
      39    if (i != 1)
      40      abort ();
      41  }
      42  
      43  void
      44  f4 (void)
      45  {
      46    int i = 0;
      47    --(typeof (++i, (int (*)[i])a)){&a + 1};
      48    if (i != 1)
      49      abort ();
      50  }
      51  
      52  void
      53  f5 (void)
      54  {
      55    int i = 0;
      56    (typeof (++i, (int (*)[i])a)){&a}++;
      57    if (i != 1)
      58      abort ();
      59  }
      60  
      61  int
      62  main (void)
      63  {
      64    f1 ();
      65    f2 ();
      66    f3 ();
      67    f4 ();
      68    f5 ();
      69    exit (0);
      70  }