+++ /dev/null
-/* 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 ();
-}