aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.dg/torture/pr47677.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/torture/pr47677.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/torture/pr47677.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/torture/pr47677.c b/gcc-4.9/gcc/testsuite/gcc.dg/torture/pr47677.c
new file mode 100644
index 000000000..bd9077863
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/torture/pr47677.c
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+
+struct S { int s; int u; };
+extern int bar (void);
+extern struct S *baz (void);
+
+void
+foo (int x, struct S *y, char z, int *v, struct S *s)
+{
+ int c, d;
+ if (x & 2)
+ d = 1;
+ else
+ {
+ d = (x & 1) ? 11 : 0;
+ while ((c = (s->s != (s->u & 1) ? s->s : bar ())) != '\0');
+ c = (s->s != '\\' && (s->u & 4) ? s->s : bar ());
+ if (c == '<')
+ goto lab;
+ }
+ while ((c = ((s->u & 1) ? s->s : bar ())) != 0
+ && ((d != 11 && d != 17) || (v[c] & 1) == 0))
+ {
+ lab:;
+ switch (d)
+ {
+ case 14:
+ if (c == '}')
+ y = baz ();
+ d = y->s = z == '<' ? 17 : 11;
+ }
+ }
+}
+