| /* PR debug/42662 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-g -O2" } */ |
| |
| struct S { unsigned long s[17]; }; |
| |
| static inline void |
| foo (struct S *r, struct S *a, unsigned n) |
| { |
| unsigned b = n / 8; |
| r->s[0] = (b >= 1 ? : a->s[1 - b]); |
| } |
| |
| static inline void |
| bar (struct S *r, struct S *a) |
| { |
| r->s[0] = a->s[0] << 1; |
| } |
| |
| static inline void |
| baz (struct S *r, struct S *a, struct S *b) |
| { |
| unsigned c = 0; |
| int i; |
| for (i = 0; i < 3; ++i) |
| { |
| unsigned long d = a->s[i]; |
| long e = d + b->s[i]; |
| if (c) |
| ++e == 0; |
| c = e < d; |
| r->s[i] = e; |
| } |
| } |
| |
| void |
| test (struct S *r, int s, int d) |
| { |
| struct S u; |
| if (s) |
| { |
| bar (&u, r); |
| foo (r, r, 3); |
| baz (r, r, &u); |
| } |
| u.s[0] = d; |
| baz (r, r, &u); |
| } |