diff options
author | Joseph Myers <jsm28@cam.ac.uk> | 2000-11-13 14:08:09 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2000-11-13 14:08:09 +0000 |
commit | 444ca59fa44336fbfe4744c9870bf1dd0a75093f (patch) | |
tree | 813f582e01755dc24b3956ee33ab7b1309e45624 /gcc/testsuite/gcc.dg/c99-scope-2.c | |
parent | f2ecb02d79f0d5df0d602c33562e3b9eec5085b7 (diff) | |
download | gcc-444ca59fa44336fbfe4744c9870bf1dd0a75093f.zip gcc-444ca59fa44336fbfe4744c9870bf1dd0a75093f.tar.gz gcc-444ca59fa44336fbfe4744c9870bf1dd0a75093f.tar.bz2 |
c-parse.in (c99_block_start, [...]): New.
* c-parse.in (c99_block_start, c99_block_end,
c99_block_lineno_labeled_stmt): New.
(simple_if, do_stmt_start): Use c99_block_lineno_labeled_stmt.
(stmt): Split off selection and iteration statements into...
(select_or_iter_stmt): New. Use c99_block_lineno_labeled_stmt.
testsuite:
* gcc.dg/c99-scope-1.c: Remove xfail.
* gcc.dg/c99-scope-2.c: New test.
From-SVN: r37427
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); +} |