diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2002-05-29 16:09:09 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2002-05-29 16:09:09 +0000 |
commit | 5a3bb17d717a43115ae0723afcb79617b8dc907f (patch) | |
tree | de4529d39957e99b4c3cda76c0c0d88dc0e3ad02 /gcc/testsuite | |
parent | 4d4d89e28392eeff561fa945f8e7403199897acb (diff) | |
download | gcc-5a3bb17d717a43115ae0723afcb79617b8dc907f.zip gcc-5a3bb17d717a43115ae0723afcb79617b8dc907f.tar.gz gcc-5a3bb17d717a43115ae0723afcb79617b8dc907f.tar.bz2 |
* gcc.c-torture/execute/20020529-1.c: New test.
From-SVN: r53998
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20020529-1.c | 78 |
2 files changed, 82 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2a9cf8b..a535db2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-05-29 Hans-Peter Nilsson <hp@axis.com> + + * gcc.c-torture/execute/20020529-1.c: New test. + 2002-05-27 Richard Henderson <rth@redhat.com> * 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 0000000..d1b93c7 --- /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 <variable>.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 (); +} |