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

Reply via email to