OSDN Git Service

* c-decl.c (grokfield): Allow typedefs for anonymous structs and
[pf3gnuchains/gcc-fork.git] / 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 }