From 5ff9ab9ba32620ad855e21ec3a0156b52bbb1aa8 Mon Sep 17 00:00:00 2001 From: Terry Guo Date: Mon, 13 Apr 2015 05:22:09 +0000 Subject: [PATCH] Add missing test case 2015-04-13 Terry Guo PR target/65710 * gcc.target/arm/pr65710.c: New. From-SVN: r222037 --- gcc/testsuite/ChangeLog | 5 ++ gcc/testsuite/gcc.target/arm/pr65710.c | 118 +++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/pr65710.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 062512f017e..5b0cdc34de8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-13 Terry Guo + + PR target/65710 + * gcc.target/arm/pr65710.c: New. + 2015-04-12 Jakub Jelinek PR tree-optimization/65747 diff --git a/gcc/testsuite/gcc.target/arm/pr65710.c b/gcc/testsuite/gcc.target/arm/pr65710.c new file mode 100644 index 00000000000..139bc6414aa --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr65710.c @@ -0,0 +1,118 @@ +/* { dg-do compile } */ +/* { dg-options "-march=armv6-m -mthumb -O3 -w -mfloat-abi=soft" } */ + +struct ST { + char *buffer; + int used; +}; + +struct ST *h; + +enum { no_op, duplicate, pop_failure_jump, dummy_failure_jump }; + +typedef struct { + unsigned pointer; +} byte_fail_stack_elt_t; + +typedef struct { unsigned avail; } byte_fail_stack_type; + +typedef union { + byte_fail_stack_elt_t word; + struct { + unsigned match_null_string_p : 2; + unsigned is_active : 1; + unsigned ever_matched_something : 1; + } bits; +} byte_register_info_type; + +static int a; +int b = 0; +int c, e, f; +int *d, *g; + +int +byte_re_match_2_internal_size2(const int p2, int p3, const int p4) { + int i, p; + char *j; + char k, l, m, n = h; + byte_fail_stack_type o; + byte_fail_stack_elt_t *q; + unsigned int s = (unsigned int)h; + long t, u; + char **v, *w, **x, **y, **t1; + byte_register_info_type *z, *t2 = __builtin_alloca(s); + x = __builtin_alloca(s); + y = __builtin_alloca(s); + z = __builtin_alloca(sizeof(byte_register_info_type)); + k = p4 + byte_re_match_2_internal_size2; + if (p3) + f = p4; + for (;;) { + if (h == h->used) { + g = f; + if (o.avail) { + b = 1; + for (; i < s; i++) + t1[i] = w; + goto fail; + } + e = 30 > s; + d = p4; + d[s] = 1; + return; + } + switch (*h->buffer++) { + case no_op: + while (m && n ?: *g) + ; + y[*h->buffer] = z[*h->buffer].bits.match_null_string_p ? w == &a ?: w : w; + w = g; + if (t) { + char r = h; + while (r && z[r].bits.is_active) + r--; + if (r == 0) + ; + else + u = r; + } + switch (*j++) + case dummy_failure_jump: + i = j; + if (i) + if (z[*h->buffer].bits.ever_matched_something) { + unsigned r; + z[*h->buffer].bits.ever_matched_something = r = *h->buffer; + for (; r + *(h->buffer + 1); r++) { + v = x[r]; + w[r] = y[r]; + } + } + break; + case duplicate: { + char *t3 = p2 + p3; + if (t3) + break; + } + if ((p3 ?: p4) == k) + goto fail; + case pop_failure_jump: + for (; c; c--) + t2[c].word = q[o.avail]; + char t4; + q = t4 = __builtin_allocamemcpy(t4 ?: (p <<= 1)); + } + continue; + fail : { + unsigned t5; + t = q; + t5 = u; + for (; t5 >= t; t5--) + v[t5] = q[--o.avail].pointer; + switch (*h->buffer) + case pop_failure_jump: + goto fail; + } + m = &l; + } +}