Add missing test case
authorxguo <xguo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Apr 2015 05:22:09 +0000 (05:22 +0000)
committerxguo <xguo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Apr 2015 05:22:09 +0000 (05:22 +0000)
2015-04-13  Terry Guo  <terry.guo@arm.com>

        PR target/65710
        * gcc.target/arm/pr65710.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222037 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr65710.c [new file with mode: 0644]

index 062512f..5b0cdc3 100644 (file)
@@ -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 (file)
index 0000000..139bc64
--- /dev/null
@@ -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;
+  }
+}