modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr82524.c (about) 1 /* PR target/82524 */ 2 3 struct S { unsigned char b, g, r, a; }; 4 union U { struct S c; unsigned v; }; 5 6 static inline unsigned char 7 foo (unsigned char a, unsigned char b) 8 { 9 return ((a + 1) * b) >> 8; 10 } 11 12 __attribute__((noinline, noclone)) unsigned 13 bar (union U *x, union U *y) 14 { 15 union U z; 16 unsigned char v = x->c.a; 17 unsigned char w = foo (y->c.a, 255 - v); 18 z.c.r = foo (x->c.r, v) + foo (y->c.r, w); 19 z.c.g = foo (x->c.g, v) + foo (y->c.g, w); 20 z.c.b = foo (x->c.b, v) + foo (y->c.b, w); 21 z.c.a = 0; 22 return z.v; 23 } 24 25 int 26 main () 27 { 28 union U a, b, c; 29 if ((unsigned char) ~0 != 255 || sizeof (unsigned) != 4) 30 return 0; 31 a.c = (struct S) { 255, 255, 255, 0 }; 32 b.c = (struct S) { 255, 255, 255, 255 }; 33 c.v = bar (&a, &b); 34 if (c.c.b != 255 || c.c.g != 255 || c.c.r != 255 || c.c.a != 0) 35 __builtin_abort (); 36 return 0; 37 }