aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Guo <terry.guo@arm.com>2015-04-13 05:22:09 +0000
committerXuepeng Guo <xguo@gcc.gnu.org>2015-04-13 05:22:09 +0000
commit5ff9ab9ba32620ad855e21ec3a0156b52bbb1aa8 (patch)
treee07790932d3b7ef9958ae0b654f18069908766a5
parentb801e1afc9cac4bf347382fddf311a8c7d3ba141 (diff)
downloadgcc-5ff9ab9ba32620ad855e21ec3a0156b52bbb1aa8.zip
gcc-5ff9ab9ba32620ad855e21ec3a0156b52bbb1aa8.tar.gz
gcc-5ff9ab9ba32620ad855e21ec3a0156b52bbb1aa8.tar.bz2
Add missing test case
2015-04-13 Terry Guo <terry.guo@arm.com> PR target/65710 * gcc.target/arm/pr65710.c: New. From-SVN: r222037
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/arm/pr65710.c118
2 files changed, 123 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 062512f..5b0cdc3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-04-13 Terry Guo <terry.guo@arm.com>
+
+ PR target/65710
+ * gcc.target/arm/pr65710.c: New.
+
2015-04-12 Jakub Jelinek <jakub@redhat.com>
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 0000000..139bc64
--- /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;
+ }
+}