diff options
author | Jim Wilson <wilson@cygnus.com> | 1998-04-03 12:29:04 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1998-04-03 04:29:04 -0800 |
commit | 1f3b6a3ebeec51efe379514c89a412119ef19f82 (patch) | |
tree | 00c1072ba9558b7edaa7ce2d7b8ee0831078c39d /gcc | |
parent | b3e401c25a949e00ea3a77a508d3a33142f139e2 (diff) | |
download | gcc-1f3b6a3ebeec51efe379514c89a412119ef19f82.zip gcc-1f3b6a3ebeec51efe379514c89a412119ef19f82.tar.gz gcc-1f3b6a3ebeec51efe379514c89a412119ef19f82.tar.bz2 |
x86 regex.c failure from Jim Meyering.
* compile/980329-1.c: New test.
From-SVN: r18975
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/980329-1.c | 72 |
2 files changed, 75 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/ChangeLog b/gcc/testsuite/gcc.c-torture/ChangeLog index 7a01b5f..c73d261 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 <wilson@cygnus.com> + + * compile/980329-1.c: New test. Mon Feb 23 15:16:53 1998 Robert Lipe <robertl@dgii.com> From Bruno Haible <haible@ilog.fr>: 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 0000000..d11b49b --- /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; +} |