1 /* PR tree-optimization/27285 */
2
3 extern void abort (void);
4
5 struct S { unsigned char a, b, c, d[16]; };
6
7 void __attribute__ ((noinline))
foo(struct S * x,struct S * y)8 foo (struct S *x, struct S *y)
9 {
10 int a, b;
11 unsigned char c, *d, *e;
12
13 b = x->b;
14 d = x->d;
15 e = y->d;
16 a = 0;
17 while (b)
18 {
19 if (b >= 8)
20 {
21 c = 0xff;
22 b -= 8;
23 }
24 else
25 {
26 c = 0xff << (8 - b);
27 b = 0;
28 }
29
30 e[a] = d[a] & c;
31 a++;
32 }
33 }
34
35 int
main(void)36 main (void)
37 {
38 struct S x = { 0, 25, 0, { 0xaa, 0xbb, 0xcc, 0xdd }};
39 struct S y = { 0, 0, 0, { 0 }};
40
41 foo (&x, &y);
42 if (x.d[0] != y.d[0] || x.d[1] != y.d[1]
43 || x.d[2] != y.d[2] || (x.d[3] & 0x80) != y.d[3])
44 abort ();
45 return 0;
46 }
47