From 5a3bb17d717a43115ae0723afcb79617b8dc907f Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Wed, 29 May 2002 16:09:09 +0000 Subject: [PATCH] * gcc.c-torture/execute/20020529-1.c: New test. From-SVN: r53998 --- gcc/testsuite/ChangeLog | 4 + .../gcc.c-torture/execute/20020529-1.c | 78 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/20020529-1.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2a9cf8b81a3..a535db27ab7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-05-29 Hans-Peter Nilsson + + * gcc.c-torture/execute/20020529-1.c: New test. + 2002-05-27 Richard Henderson * g++.dg/ext/attrib6.C: New test case. diff --git a/gcc/testsuite/gcc.c-torture/execute/20020529-1.c b/gcc/testsuite/gcc.c-torture/execute/20020529-1.c new file mode 100644 index 00000000000..d1b93c76fdf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020529-1.c @@ -0,0 +1,78 @@ +/* PR target/6838 from cato@df.lth.se. + cris-elf got an ICE with -O2: the insn matching + (insn 49 48 52 (parallel[ + (set (mem/s:HI (plus:SI (reg/v/f:SI 0 r0 [24]) + (const_int 8 [0x8])) [5 .c+0 S2 A8]) + (reg:HI 2 r2 [27])) + (set (reg/f:SI 2 r2 [31]) + (plus:SI (reg/v/f:SI 0 r0 [24]) + (const_int 8 [0x8]))) + ] ) 24 {*mov_sidehi_mem} (nil) + (nil)) + forced a splitter through the output pattern "#", but there was no + matching splitter. */ + +struct xx + { + int a; + struct xx *b; + short c; + }; + +int f1 (struct xx *); +void f2 (void); + +int +foo (struct xx *p, int b, int c, int d) +{ + int a; + + for (;;) + { + a = f1(p); + if (a) + return (0); + if (b) + continue; + p->c = d; + if (p->a) + f2 (); + if (c) + f2 (); + d = p->c; + switch (a) + { + case 1: + if (p->b) + f2 (); + if (c) + f2 (); + default: + break; + } + } + return d; +} + +int main (void) +{ + struct xx s = {0, &s, 23}; + if (foo (&s, 0, 0, 0) != 0 || s.a != 0 || s.b != &s || s.c != 0) + abort (); + exit (0); +} + +int +f1 (struct xx *p) +{ + static int beenhere = 0; + if (beenhere++ > 1) + abort (); + return beenhere > 1; +} + +void +f2 (void) +{ + abort (); +}