aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/c99-scope-2.c
diff options
context:
space:
mode:
authorJoseph Myers <jsm28@cam.ac.uk>2000-11-13 14:08:09 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2000-11-13 14:08:09 +0000
commit444ca59fa44336fbfe4744c9870bf1dd0a75093f (patch)
tree813f582e01755dc24b3956ee33ab7b1309e45624 /gcc/testsuite/gcc.dg/c99-scope-2.c
parentf2ecb02d79f0d5df0d602c33562e3b9eec5085b7 (diff)
downloadgcc-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.c71
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);
+}