1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-pre -fno-ipa-sra" } */
3 
4 typedef struct {
5     unsigned int key;
6 } S;
7 typedef struct s1  {
8     unsigned int key;
9     unsigned int bits;
10     struct s1 *left, *right;
11 }S1;
12 extern S a[1024];
bar(S * p,S1 * n)13 static inline int bar( S* p, S1* n )
14 {
15   S1 *curr;
16   S1 *next;
17 
18   if ( n->left == n )
19     return (int)(p->key == n->key);
20 
21   curr = n;
22   next = n->left;
23 
24   while (curr->bits > next->bits ) {
25       curr = next;
26       if (p->key & (1 << curr->bits))
27 	next = curr->right;
28       else
29 	next = curr->left;
30   }
31 
32   return (int)(p->key == next->key);
33 
34 }
35 
foo(S1 * root,int N)36 int foo (S1 *root, int N)
37 {
38   volatile int r;
39   int i,j;
40   for (i=0; i<N; i++)
41     for (j=0;j<1024; j++)
42       r = bar(&a[j], root);
43   return 0;
44 }
45 
46 /* { dg-final { scan-tree-dump-times "key" 3 "pre" } } */
47