1 /* { dg-options "-O2" } */
2 
3 /* N1150 5.1 Conversion between decimal floating integer.
4    C99 6.3.1.4(1a) New.
5    These should all be folded at compile time.  */
6 
7 #include "dfp-dbg.h"
8 
9 #ifdef __cplusplus
10 #define BOOL bool
11 #else
12 #define BOOL _Bool
13 #endif
14 
15 extern void link_error (void);
16 
17 int
main()18 main ()
19 {
20   _Decimal32 d32;
21   _Decimal64 d64;
22   _Decimal128 d128;
23   unsigned int ui;
24   unsigned long ul;
25   unsigned long long ull;
26   int si;
27   long sl;
28   long long sll;
29   BOOL b;
30 
31   /* C99 Section 6.7.2 Type specifiers.  Type _Bool is
32      mentioned in this section.  Conversions between
33      BOOL and DFP types.  */
34 
35   /* Decimal float to unsigned integer.  */
36   d32 = 456.789df;
37   d64 = 23.456789dd;
38   d128 = 1234.5678dl;
39 
40   ui = d32;
41   if (ui != 456U)
42     link_error ();
43   ul = d32;
44   if (ul != 456UL)
45     link_error ();
46   ull = d32;
47   if (ull != 456ULL)
48     link_error ();
49 
50   ui = d64;
51   if (ui != 23U)
52     link_error ();
53   ul = d64;
54   if (ul != 23UL)
55     link_error ();
56   ull = d64;
57   if (ull != 23ULL)
58     link_error ();
59 
60   ui = d128;
61   if (ui != 1234U)
62     link_error ();
63   ul = d128;
64   if (ul != 1234UL)
65     link_error ();
66   ull = d128;
67   if (ull != 1234ULL)
68     link_error ();
69 
70   /* Decimal float to signed integer.  */
71 
72   /* Decimal float to BOOL.  */
73   d32 = 1.23df;
74   d64 = -3.4dd;
75   d128 = 0.00003dl;
76 
77   b = d32;
78   if (!b)
79     link_error ();
80   b = d64;
81   if (!b)
82     link_error ();
83   b = d128;
84   if (!b)
85     link_error ();
86 
87   /* Unsigned integer to decimal float.  */
88   ui = 987U;
89   ul = 345678UL;
90   ull = 1234567ULL;
91 
92   d32 = ui;
93   if (d32 != 987.0df)
94     link_error ();
95   d32 = ul;
96   if (d32 != 345678.0df)
97     link_error ();
98   d32 = ull;
99   if (d32 != 1234567.df)
100     link_error ();
101 
102   d64 = ui;
103   if (d64 != 987.0dd)
104     link_error ();
105   d64 = ul;
106   if (d64 != 345678.0dd)
107     link_error ();
108   d64 = ull;
109   if (d64 != 1234567.dd)
110     link_error ();
111 
112   d128 = ui;
113   if (d128 != 987.0dl)
114     link_error ();
115   d128 = ul;
116   if (d128 != 345678.0dl)
117     link_error ();
118   d128 = ull;
119   if (d128 != 1234567.dl)
120     link_error ();
121 
122   /* Signed integer to decimal float.  */
123   si = -987;
124   sl = -345678;
125   sll = -1234567;
126 
127   d32 = si;
128   if (d32 != -987.0df)
129     link_error ();
130   d32 = sl;
131   if (d32 != -345678.0df)
132     link_error ();
133   d32 = sll;
134   if (d32 != -1234567.df)
135     link_error ();
136 
137   d64 = si;
138   if (d64 != -987.0dd)
139     link_error ();
140   d64 = sl;
141   if (d64 != -345678.0dd)
142     link_error ();
143   d64 = sll;
144   if (d64 != -1234567.dd)
145     link_error ();
146 
147   d128 = si;
148   if (d128 != -987.0dl)
149     link_error ();
150   d128 = sl;
151   if (d128 != -345678.0dl)
152     link_error ();
153   d128 = sll;
154   if (d128 != -1234567.dl)
155     link_error ();
156 
157   /* BOOL to decimal float.  */
158   d32 = 0.0DF;
159   d64 = 0.0DD;
160   d128 = 0.0DL;
161 
162   b = d32;
163   if (b)
164     link_error ();
165   b = d64;
166   if (b)
167     link_error ();
168   b = d128;
169   if (b)
170     link_error ();
171 
172   return 0;
173 }
174