1 /* Cast to union is a GNU C extension. */ 2 3 #include "dfp-dbg.h" 4 5 union u 6 { 7 _Decimal128 d128; 8 double d; 9 }; 10 11 union n 12 { 13 double d; 14 _Decimal64 d64; 15 }; 16 main()17int main () 18 { 19 static union u u1 = { 0.0dl }; 20 static union u u2 = { 4.2dl }; 21 static union u u4 = { 0.0 }; 22 23 static union n n1 = { 2.2dd }; 24 static union n n2 = { 3.25 }; 25 26 _Decimal128 d128; 27 _Decimal64 d64; 28 double d; 29 30 if (u1.d128 != 0.0dl) 31 FAILURE 32 33 if (u2.d128 != 4.2dl) 34 FAILURE 35 36 /* cast decimal floating point to union type. */ 37 d128 = 1.23dl; 38 d64 = 4.56dd; 39 d = 3.25; 40 41 u4 = (union u) d128; 42 if (u4.d128 != 1.23dl) 43 FAILURE 44 45 u4 = (union u) d; 46 if (u4.d != 3.25) 47 FAILURE 48 49 n1 = (union n) d64; 50 if (n1.d64 != 4.56dd) 51 FAILURE 52 53 n1 = (union n)d; 54 if (n1.d != 3.25) 55 FAILURE 56 57 FINISH 58 } 59