modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/960416-1.c (about) 1 typedef unsigned long int st; 2 typedef unsigned long long dt; 3 typedef union 4 { 5 dt d; 6 struct 7 { 8 st h, l; 9 } 10 s; 11 } t_be; 12 13 typedef union 14 { 15 dt d; 16 struct 17 { 18 st l, h; 19 } 20 s; 21 } t_le; 22 23 #define df(f, t) \ 24 int \ 25 f (t afh, t bfh) \ 26 { \ 27 t hh; \ 28 t hp, lp, dp, m; \ 29 st ad, bd; \ 30 int s; \ 31 s = 0; \ 32 ad = afh.s.h - afh.s.l; \ 33 bd = bfh.s.l - bfh.s.h; \ 34 if (bd > bfh.s.l) \ 35 { \ 36 bd = -bd; \ 37 s = ~s; \ 38 } \ 39 lp.d = (dt) afh.s.l * bfh.s.l; \ 40 hp.d = (dt) afh.s.h * bfh.s.h; \ 41 dp.d = (dt) ad *bd; \ 42 dp.d ^= s; \ 43 hh.d = hp.d + hp.s.h + lp.s.h + dp.s.h; \ 44 m.d = (dt) lp.s.h + hp.s.l + lp.s.l + dp.s.l; \ 45 return hh.s.l + m.s.l; \ 46 } 47 48 df(f_le, t_le) 49 df(f_be, t_be) 50 51 main () 52 { 53 t_be x; 54 x.s.h = 0x10000000U; 55 x.s.l = 0xe0000000U; 56 if (x.d == 0x10000000e0000000ULL 57 && f_be ((t_be) 0x100000000ULL, (t_be) 0x100000000ULL) != -1) 58 abort (); 59 if (x.d == 0xe000000010000000ULL 60 && f_le ((t_le) 0x100000000ULL, (t_le) 0x100000000ULL) != -1) 61 abort (); 62 exit (0); 63 }