1 /* { dg-options "-O -fno-tree-ccp -fno-tree-copy-prop" } */
2 #define CSF __builtin_copysignf
3 #define CSD __builtin_copysign
4 #define CSL __builtin_copysignl
5 #define MODFF __builtin_modff
6 #define MODFD __builtin_modf
7 #define MODFL __builtin_modfl
8
9 extern void link_error (void);
10
11 void
foo(void)12 foo (void)
13 {
14 float iptrf;
15 double iptr;
16 long double iptrl;
17 long long iptrll;
18 if ((CSF (1.0F, MODFF (0x1p10F + 0.5f, &iptrf)) != CSF (1.0F, 0.5f))
19 || (CSF (1.0F, iptrf) != 0x1p10f))
20 link_error ();
21 if (MODFD (0x1p10F + 0.5, &iptr) != 0.5
22 || (CSD (1.0, MODFD (0x1p10F + 0.5, &iptr)) != CSD (1.0, 0.5))
23 || (CSD (1.0, iptr) != CSD (1.0, 0x1p10)))
24 link_error ();
25 if (MODFL (0x1p10F + 0.5l, &iptrl) != 0.5l
26 || (CSL (1.0L, MODFL (0x1p10F + 0.5l, &iptrl)) != CSL (1.0L, 0.5l))
27 || (CSL (1.0L, iptrl) != CSL (1.0L, 0x1p10l)))
28 link_error ();
29 if ((CSF (1.0F, (MODFF (0x1p10F + 0x1p-10f, &iptrf)))
30 != CSF (1.0F, 0x1p-10f))
31 || (CSF (1.0F, iptrf) != CSF (1.0F, 0x1p10f)))
32 link_error ();
33 if (MODFD (0x1p10F + 0x1p-10, &iptr) != 0x1p-10
34 || (CSD (1.0, (MODFD (0x1p10F + 0x1p-10, &iptr)))
35 != CSD (1.0, 0x1p-10)) || (CSD (1.0, iptr) != CSD (1.0, 0x1p10)))
36 link_error ();
37 if (MODFL (0x1p10F + 0x1p-10l, &iptrl) != 0x1p-10l
38 || (CSL (1.0L, (MODFL (0x1p10F + 0x1p-10l, &iptrl)))
39 != CSL (1.0L, 0x1p-10l))
40 || (CSL (1.0L, iptrl) != CSL (1.0L, 0x1p10l)))
41 link_error ();
42 if ((CSF (1.0F, (MODFF (12345678L / 17.0f, &iptrf)))
43 != CSF (1.0F, (-726216L + 12345678L / 17.0f)))
44 || (CSF (1.0F, iptrf) != CSF (1.0F, 726216.0f)))
45 link_error ();
46 if (MODFD (12345678L / 17.0, &iptr) != -726216L + 12345678L / 17.0
47 || (CSD (1.0, (MODFD (12345678L / 17.0, &iptr)))
48 != CSD (1.0, (-726216L + 12345678L / 17.0)))
49 || (CSD (1.0, iptr) != CSD (1.0, 726216.0)))
50 link_error ();
51 if ((CSL (1.0L, (MODFL (12345678L / 17.0l, &iptrl)))
52 != CSL (1.0L, (-726216L + 12345678L / 17.0l)))
53 || (CSL (1.0L, iptrl) != CSL (1.0L, 726216.0l)))
54 link_error ();
55 if (MODFF (555.555f, &iptrf) != -555 + 555.555f
56 || (CSF (1.0F, iptrf) != CSF (1.0F, 555.0f)))
57 link_error ();
58 if (MODFD (555.555, &iptr) != -555 + 555.555
59 || (CSD (1.0, (MODFD (555.555, &iptr))) != CSD (1.0, (-555 + 555.555)))
60 || (CSD (1.0, iptr) != CSD (1.0, 555.0)))
61 link_error ();
62 if (MODFL (555.555l, &iptrl) != -555 + 555.555l
63 || (CSL (1.0L, (MODFL (555.555l, &iptrl)))
64 != CSL (1.0L, (-555 + 555.555l)))
65 || (CSL (1.0L, iptrl) != CSL (1.0L, 555.0l)))
66 link_error ();
67 if (MODFF (5000 / 11.0f, &iptrf) != -454 + 5000 / 11.0f
68 || (CSF (1.0F, (MODFF (5000 / 11.0f, &iptrf)))
69 != CSF (1.0F, (-454 + 5000 / 11.0f)))
70 || (CSF (1.0F, iptrf) != CSF (1.0F, 454.0f)))
71 link_error ();
72 if (MODFD (5000 / 11.0, &iptr) != -454 + 5000 / 11.0
73 || (CSD (1.0, (MODFD (5000 / 11.0, &iptr)))
74 != CSD (1.0, (-454 + 5000 / 11.0)))
75 || (CSD (1.0, iptr) != CSD (1.0, 454.0)))
76 link_error ();
77 if ((CSL (1.0L, (MODFL (5000 / 11.0l, &iptrl)))
78 != CSL (1.0L, (-454 + 5000 / 11.0l)))
79 || (CSL (1.0L, iptrl) != CSL (1.0L, 454.0l)))
80 link_error ();
81 if ((CSF (1.0F, (MODFF (1000 / 7.0f, &iptrf)))
82 != CSF (1.0F, (-142 + 1000 / 7.0f)))
83 || (CSF (1.0F, iptrf) != CSF (1.0F, 142.0f)))
84 link_error ();
85 if ((CSD (1.0, (MODFD (1000 / 7.0, &iptr)))
86 != CSD (1.0, (-142 + 1000 / 7.0)))
87 || (CSD (1.0, iptr) != CSD (1.0, 142.0)))
88 link_error ();
89 if ((CSL (1.0L, (MODFL (1000 / 7.0l, &iptrl)))
90 != CSL (1.0L, (-142 + 1000 / 7.0l)))
91 || (CSL (1.0L, iptrl) != CSL (1.0L, 142.0l)))
92 link_error ();
93 if (MODFF (123 / 7.0f, &iptrf) != -17 + 123 / 7.0f
94 || (CSF (1.0F, iptrf) != CSF (1.0F, 17.0f)))
95 link_error ();
96 if (MODFD (123 / 7.0, &iptr) != -17 + 123 / 7.0
97 || (CSD (1.0, iptr) != CSD (1.0, 17.0)))
98 link_error ();
99 if ((CSL (1.0L, (MODFL (123 / 7.0l, &iptrl)))
100 != CSL (1.0L, (-17 + 123 / 7.0l)))
101 || (CSL (1.0L, iptrl) != CSL (1.0L, 17.0l)))
102 link_error ();
103 if ((CSF (1.0F, (MODFF (117 / 7.0f, &iptrf)))
104 != CSF (1.0F, (-16 + 117 / 7.0f)))
105 || (CSF (1.0F, iptrf) != CSF (1.0F, 16.0f)))
106 link_error ();
107 if ((CSD (1.0, (MODFD (117 / 7.0, &iptr))) != CSD (1.0, (-16 + 117 / 7.0)))
108 || (CSD (1.0, iptr) != CSD (1.0, 16.0)))
109 link_error ();
110 if (MODFL (117 / 7.0l, &iptrl) != -16 + 117 / 7.0l
111 || (CSL (1.0L, iptrl) != CSL (1.0L, 16.0l)))
112 link_error ();
113 if (MODFF (5.5f, &iptrf) != 0.5f || (CSF (1.0F, iptrf) != CSF (1.0F, 5.0f)))
114 link_error ();
115 if (MODFD (5.5, &iptr) != 0.5 || (CSD (1.0, iptr) != CSD (1.0, 5.0)))
116 link_error ();
117 if (MODFL (5.5l, &iptrl) != 0.5l || (CSL (1.0L, iptrl) != CSL (1.0L, 5.0l)))
118 link_error ();
119 if ((CSF (1.0F, (MODFF (1.5f, &iptrf))) != CSF (1.0F, 0.5f))
120 || (CSF (1.0F, iptrf) != 1.0f))
121 link_error ();
122 if ((CSD (1.0, (MODFD (1.5, &iptr))) != CSD (1.0, 0.5))
123 || (CSD (1.0, iptr) != 1.0))
124 link_error ();
125 if (MODFL (1.5l, &iptrl) != iptrl != 1.0l || (CSL (1.0L, iptrl) != 1.0l))
126 link_error ();
127 if (MODFF (4 / 3.0f, &iptrf) != -1 + 4 / 3.0f
128 || (CSF (1.0F, (MODFF (4 / 3.0f, &iptrf)))
129 != CSF (1.0F, (-1 + 4 / 3.0f))) || (CSF (1.0F, iptrf) != (1.0F)))
130 link_error ();
131 if (MODFD (4 / 3.0, &iptr) != -1 + 4 / 3.0 || (CSD (1.0, iptr) != 1.0))
132 link_error ();
133 if (MODFL (4 / 3.0l, &iptrl) != iptrl != 1.0l
134 || (CSL (1.0L, iptrl) != 1.0l))
135 link_error ();
136 if ((((MODFF (1.0f, &iptrf)))) || (CSF (1.0F, iptrf) != 1.0f))
137 link_error ();
138 if ((((MODFD (1.0, &iptr))) != 0.0) || (CSD (1.0, iptr) != 1.0))
139 link_error ();
140 if ((((MODFL (1.0l, &iptrl))) != 0.0l) || (CSL (1.0L, iptrl) != 1.0l))
141 link_error ();
142 if (MODFF (0.5f, &iptrf) != 0.5f || (CSF (1.0F, iptrf) != CSF (1.0F, 0.0f)))
143 link_error ();
144 if (MODFD (0.5, &iptr) != 0.5 || (CSD (1.0, iptr) != CSD (1.0, 0.0)))
145 link_error ();
146 if ((CSL (1.0L, (MODFL (0.5l, &iptrl))) != CSL (1.0L, 0.5l))
147 || (CSL (1.0L, iptrl) != CSL (1.0L, 0.0l)))
148 link_error ();
149 if (MODFF (4 / 9.0f, &iptrf) != 4 / 9.0f
150 != (CSF (1.0F, (MODFF (4 / 9.0f, &iptrf))) != CSF (1.0F, (4 / 9.0f)))
151 || (CSF (1.0F, iptrf) != CSF (1.0F, 0.0f)))
152 link_error ();
153 if (MODFD (4 / 9.0, &iptr) != 4 / 9.0
154 || (CSD (1.0, iptr) != CSD (1.0, 0.0)))
155 link_error ();
156 if (MODFL (4 / 9.0l, &iptrl) != 4 / 9.0l
157 || (CSL (1.0L, iptrl) != CSL (1.0L, 0.0l)))
158 link_error ();
159 if (MODFF (1 / 3.0f, &iptrf) != 1 / 3.0f
160 || (CSF (1.0F, iptrf) != CSF (1.0F, 0.0f)))
161 link_error ();
162 if (MODFD (1 / 3.0, &iptr) != 1 / 3.0
163 || (CSD (1.0, iptr) != CSD (1.0, 0.0)))
164 link_error ();
165 if ((CSL (1.0L, (MODFL (1 / 3.0l, &iptrl))) != CSL (1.0L, (1 / 3.0l)))
166 || (CSL (1.0L, iptrl) != CSL (1.0L, 0.0l)))
167 link_error ();
168 if ((CSF (1.0F, (MODFF (1 / 9.0f, &iptrf))) != CSF (1.0F, (1 / 9.0f)))
169 || (CSF (1.0F, iptrf) != CSF (1.0F, 0.0f)))
170 link_error ();
171 if (MODFD (1 / 9.0, &iptr) != 1 / 9.0
172 || (CSD (1.0, iptr) != CSD (1.0, 0.0)))
173 link_error ();
174 if ((CSL (1.0L, (MODFL (1 / 9.0l, &iptrl))) != CSL (1.0L, (1 / 9.0l)))
175 || (CSL (1.0L, iptrl) != CSL (1.0L, 0.0l)))
176 link_error ();
177 if ((((MODFF (0.0f, &iptrf)))) || (CSF (1.0F, iptrf) != CSF (1.0F, 0.0f)))
178 link_error ();
179 if ((((MODFD (0.0, &iptr)))) || (CSD (1.0, iptr) != CSD (1.0, 0.0)))
180 link_error ();
181 if ((((MODFL (0.0l, &iptrl))) != 0.0l)
182 || (CSL (1.0L, iptrl) != CSL (1.0L, 0.0l)))
183 link_error ();
184 if ((((MODFF (-0.0f, &iptrf)))) || (CSF (1.0F, iptrf) != CSF (1.0F, -0.0f)))
185 link_error ();
186 if ((((MODFD (-0.0, &iptr)))) || (CSD (1.0, iptr) != CSD (1.0, -0.0)))
187 link_error ();
188 if ((CSL (1.0L, (MODFL (-0.0l, &iptrl))) != CSL (1.0L, -0.0l))
189 || (CSL (1.0L, iptrl) != CSL (1.0L, -0.0l)))
190 link_error ();
191 if (MODFF (-1 / 9.0f, &iptrf) != -1 / 9.0f
192 || (CSF (1.0F, (MODFF (-1 / 9.0f, &iptrf))) != CSF (1.0F, (-1 / 9.0f)))
193 || (CSF (1.0F, iptrf) != CSF (1.0F, -0.0f)))
194 link_error ();
195 if (MODFD (-1 / 9.0, &iptr) != -1 / 9.0
196 || (CSD (1.0, iptr) != CSD (1.0, -0.0)))
197 link_error ();
198 if ((CSL (1.0L, (MODFL (-1 / 9.0l, &iptrl))) != CSL (1.0L, (-1 / 9.0l)))
199 || (CSL (1.0L, iptrl) != CSL (1.0L, -0.0l)))
200 link_error ();
201 if ((CSF (1.0F, (MODFF (-1 / 3.0f, &iptrf))) != CSF (1.0F, (-1 / 3.0f)))
202 || (CSF (1.0F, iptrf) != CSF (1.0F, -0.0f)))
203 link_error ();
204 if (MODFD (-1 / 3.0, &iptr) != -1 / 3.0
205 || (CSD (1.0, iptr) != CSD (1.0, -0.0)))
206 link_error ();
207 if ((CSL (1.0L, (MODFL (-1 / 3.0l, &iptrl))) != CSL (1.0L, (-1 / 3.0l)))
208 || (CSL (1.0L, iptrl) != CSL (1.0L, -0.0l)))
209 link_error ();
210 if (MODFF (-4 / 9.0f, &iptrf) != -4 / 9.0f
211 || (CSF (1.0F, (MODFF (-4 / 9.0f, &iptrf))) != CSF (1.0F, (-4 / 9.0f)))
212 || (CSF (1.0F, iptrf) != CSF (1.0F, -0.0f)))
213 link_error ();
214 if (MODFD (-4 / 9.0, &iptr) != -4 / 9.0
215 || (CSD (1.0, iptr) != CSD (1.0, -0.0)))
216 link_error ();
217 if (MODFL (-4 / 9.0l, &iptrl) != -4 / 9.0l
218 || (CSL (1.0L, (MODFL (-4 / 9.0l, &iptrl))) != CSL (1.0L, (-4 / 9.0l)))
219 || (CSL (1.0L, iptrl) != CSL (1.0L, -0.0l)))
220 link_error ();
221 if (MODFF (-0.5f, &iptrf) != -0.5f
222 || (CSF (1.0F, iptrf) != CSF (1.0F, -0.0f)))
223 link_error ();
224 if (MODFD (-0.5, &iptr) != -0.5
225 != (CSD (1.0, (MODFD (-0.5, &iptr))) != CSD (1.0, -0.5))
226 || (CSD (1.0, iptr) != CSD (1.0, -0.0)))
227 (MODFL (-0.5l, (long double *) &iptrll));
228 if ((((MODFF (-1.0f, &iptrf)))) || (CSF (1.0F, iptrf) != -1.0f))
229 link_error ();
230 if ((((MODFD (-1.0, &iptr))) != -0.0) || (CSD (1.0, iptr) != -1.0))
231 link_error ();
232 if ((((MODFL (-1.0l, &iptrl)))) || (CSL (1.0L, iptrl) != -1.0l))
233 link_error ();
234 if ((CSF (1.0F, (MODFF (-4 / 3.0f, &iptrf))) != CSF (1.0F, (1 - 4 / 3.0f)))
235 || (CSF (1.0F, iptrf) != -1.0f))
236 link_error ();
237 if (MODFD (-4 / 3.0, &iptr) != 1 - 4 / 3.0 || (CSD (1.0, iptr) != -1.0))
238 link_error ();
239 if (MODFL (-4 / 3.0l, &iptrl) != 1 - 4 / 3.0l
240 || (CSL (1.0L, (MODFL (-4 / 3.0l, &iptrl)))
241 != CSL (1.0L, (1 - 4 / 3.0l))) || (CSL (1.0L, iptrl) != -1.0l))
242 link_error ();
243 if ((CSF (1.0F, (MODFF (-1.5f, &iptrf))) != CSF (1.0F, -0.5f))
244 || (CSF (1.0F, iptrf) != -1.0f))
245 link_error ();
246 if ((CSD (1.0, (MODFD (-1.5, &iptr))) != CSD (1.0, -0.5))
247 || (CSD (1.0, iptr) != -1.0))
248 link_error ();
249 }
250