From 1f3b6a3ebeec51efe379514c89a412119ef19f82 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Fri, 3 Apr 1998 12:29:04 +0000 Subject: [PATCH] x86 regex.c failure from Jim Meyering. * compile/980329-1.c: New test. From-SVN: r18975 --- gcc/testsuite/gcc.c-torture/ChangeLog | 3 + .../gcc.c-torture/compile/980329-1.c | 72 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/980329-1.c diff --git a/gcc/testsuite/gcc.c-torture/ChangeLog b/gcc/testsuite/gcc.c-torture/ChangeLog index 7a01b5f52d3..c73d2613fd5 100644 --- a/gcc/testsuite/gcc.c-torture/ChangeLog +++ b/gcc/testsuite/gcc.c-torture/ChangeLog @@ -1,3 +1,6 @@ +Fri Apr 3 12:27:49 1998 Jim Wilson + + * compile/980329-1.c: New test. Mon Feb 23 15:16:53 1998 Robert Lipe From Bruno Haible : diff --git a/gcc/testsuite/gcc.c-torture/compile/980329-1.c b/gcc/testsuite/gcc.c-torture/compile/980329-1.c new file mode 100644 index 00000000000..d11b49b01c7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/980329-1.c @@ -0,0 +1,72 @@ +typedef unsigned long int size_t; +struct re_pattern_buffer + { + unsigned char *buffer; + unsigned long int used; + }; +struct re_registers + { + int *start; + }; + +static const char **regstart, **regend; +static const char **old_regend; + +static int +re_match_2_internal (struct re_pattern_buffer *bufp, + struct re_registers *regs) +{ + unsigned char *p = bufp->buffer; + unsigned char *pend = p + bufp->used; + + for (;;) + { + int highest_active_reg = 1; + if (bufp) + { + int i; + for (i = 1;; i++) + regs->start[i] = 0; + } + + switch ((unsigned int) *p++) + { + case 1: + { + unsigned char r = *p; + if (r) + highest_active_reg = r; + } + if (p + 2 == pend) + { + char is_a_jump_n = 0; + int mcnt = 0; + unsigned char *p1; + + p1 = p + 2; + switch (*p1++) + { + case 2: + is_a_jump_n = 1; + case 1: + do { do { mcnt = *p1; } while (0); p1 += 2; } while (0); + if (is_a_jump_n) + p1 = 0; + } + + if (mcnt && *p1 == 0) + { + unsigned r; + for (r = 0; r < (unsigned) *p + (unsigned) *(p + 1); r++) + { + if (regend[0] >= regstart[r]) + regend[r] = old_regend[r]; + } + do { while (0 < highest_active_reg + 1) { } } while (0); + } + } + } + } + + return -1; +} -- 2.30.2