Sam James <s...@gentoo.org> writes: > PR117546 was fixed by Eric's r14-10693-gadab597af288d6 change, but > the testcase here is sufficiently different to be worth including > in torture/. > > gcc/testsuite/ChangeLog: > PR ipa/117546 > * gcc.dg/torture/pr117546.c: New test. > ---
Sorry, forgot to ask: OK? (for both) > gcc/testsuite/gcc.dg/torture/pr117546.c | 84 +++++++++++++++++++++++++ > 1 file changed, 84 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/torture/pr117546.c > > diff --git a/gcc/testsuite/gcc.dg/torture/pr117546.c > b/gcc/testsuite/gcc.dg/torture/pr117546.c > new file mode 100644 > index 000000000000..21e2aef18b9a > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/torture/pr117546.c > @@ -0,0 +1,84 @@ > +/* { dg-do run } */ > + > +typedef struct { > + int a; > + int b; > +} c; > + > +typedef struct { > + int a; > + int b; > + int d; > +} e; > + > +typedef struct { > + int f; > + int g; > +} h; > + > +typedef struct { > + h i[1]; > + e coords[100]; > +} j; > + > +struct k { > + j glyf; > +} l; > + > +int m, n; > +double o; > +e *q; > +e r; > + > +int s(c *v) { > + if (v[0].a == m) > + __builtin_abort(); > + int t = v[0].a + v[2].b * (v[2].b - v[0].b), > + u = (2. + v[4].b - v[2].b) * (v[4].b - v[2].b); > + if (t <= 3 * u) { > + v[0] = v[4]; > + return 1; > + } > + return 0; > +} > + > +void w(struct k *v) { > + c p[5]; > + e *a = &v->glyf.coords[0]; > + if (a->d) > + p[0].a = p[0].b = a->b; > + q = &r; > + o = p[0].b; > + while (v->glyf.i[0].g--) { > + q = q == &r ? a : q + 1; > + if (q->d) > + switch (n) { > + case 2: > + p[4].a = q->a; > + p[4].b = q->b; > + n = s(p); > + } > + else > + switch (n) { > + case 0: > + n = 1; > + break; > + case 1: > + p[2].b = q->b; > + n = 2; > + break; > + case 2: > + if (s(p)) > + n = 1; > + } > + } > +} > + > +int main() { > + l.glyf.i[0] = (h){0, 26}; > + l.glyf.coords[0] = (e){4, 2, 3}; > + l.glyf.coords[3] = (e){2, 126, 3}; > + l.glyf.coords[4] = (e){2, 206}; > + l.glyf.coords[6] = (e){0, 308, 5}; > + w(&l); > +} > > base-commit: 26ca00eeedb01f9d5102586b76ae2a6e787111af