038559d41e45b8fbaddf5562824eb0b218d0c114
[gcc.git] / gcc / testsuite / gcc.dg / dfp / convert-int-fold.c
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
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 }