diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/c99-scope-2.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/c99-scope-2.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/c99-scope-2.c b/gcc/testsuite/gcc.dg/c99-scope-2.c new file mode 100644 index 0000000..5b81f70 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-scope-2.c @@ -0,0 +1,71 @@ +/* Test for new block scopes in C99. Test for each new scope. */ +/* Origin: Joseph Myers <jsm28@cam.ac.uk> */ +/* { dg-do run } */ +/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ + +extern void abort (void); +extern void exit (int); + +int +main (void) +{ + struct foo { int i0; }; + int a, b, c, d; + a = sizeof (struct foo); + if (b = sizeof (struct foo { int i0; int i1; })) + c = sizeof (struct foo { int i0; int i1; int i2; }); + if (!(a < b && b < c)) + abort (); + if ((b = sizeof (struct foo { int i0; int i1; })), 0) + c = sizeof (struct foo { int i0; int i1; int i2; }); + else + d = sizeof (struct foo { int i0; int i1; int i2; int i3; }); + if (!(a < b && b < d)) + abort (); + switch (b = sizeof (struct foo { int i0; int i1; })) + default: + c = sizeof (struct foo { int i0; int i1; int i2; }); + if (!(a < b && b < c)) + abort (); + do + c = sizeof (struct foo { int i0; int i1; int i2; }); + while ((b = sizeof (struct foo { int i0; int i1; })), 0); + if (!(a < b && b < c)) + abort (); + d = 1; + while ((b = sizeof (struct foo { int i0; int i1; })), d) + (c = sizeof (struct foo { int i0; int i1; int i2; })), d--; + if (!(a < b && b < c)) + abort (); + d = 1; + for ((b = sizeof (struct foo { int i0; int i1; })); d; d--) + c = sizeof (struct foo { int i0; int i1; int i2; }); + if (!(a < b && b < c)) + abort (); + d = 1; + for ((b = sizeof (struct foo { int i0; int i1; })); d; d--) + c = sizeof (struct foo); + if (!(a < b && b == c)) + abort (); + d = 1; + for (; (b = sizeof (struct foo { int i0; int i1; })), d; d--) + c = sizeof (struct foo { int i0; int i1; int i2; }); + if (!(a < b && b < c)) + abort (); + d = 1; + for (; (b = sizeof (struct foo { int i0; int i1; })), d; d--) + c = sizeof (struct foo); + if (!(a < b && b == c)) + abort (); + d = 1; + for (; d; (b = sizeof (struct foo { int i0; int i1; })), d--) + c = sizeof (struct foo { int i0; int i1; int i2; }); + if (!(a < b && b < c)) + abort (); + d = 1; + for (; d; (b = sizeof (struct foo { int i0; int i1; })), d--) + c = sizeof (struct foo); + if (!(a < b && b == c)) + abort (); + exit (0); +} |