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