1 /* PR rtl-optimization/46777 */
2 /* { dg-do compile } */
3 /* { dg-options "-fgcse -O -fno-tree-dominator-opts -funroll-loops" } */
4 
5 struct S { char s[256]; };
6 
7 static inline int
foo(int x,int y)8 foo (int x, int y)
9 {
10   switch (x)
11     {
12     case 1:
13     case 2:
14       return 3;
15     case 3:
16     case 4:
17       return 2;
18     case 5:
19       switch (y)
20 	{
21 	case 4:
22 	  return 1;
23 	}
24     }
25   return 0;
26 }
27 
28 void
bar(struct S * x,int * y,int * z,int ** w)29 bar (struct S *x, int *y, int *z, int **w)
30 {
31   switch (*y ? x->s[*y] : foo (y[1], y[0]))
32     {
33     case 3:
34       if (y + 2 == z)
35 	for (;;)
36 	  {
37 	    y += 2;
38 	    switch (*y ? x->s[*y] : foo (y[1], y[0]))
39 	      {
40 	      case 6:
41 		break;
42 	      default:
43 		*w = y;
44 	      }
45 	    if (y == z)
46 	      break;
47 	  }
48     }
49 }
50