blob: 103ce1d45f7780db75cf4d9ab8d30185a4563293 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } {"-mfloat-abi=soft" } } */
/* { dg-options "-mthumb -O2 -mfloat-abi=soft -w" } */
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
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;
}
}