1 /* Copyright (C) 2021 Free Software Foundation.
2
3 Check that constant folding of built-in fmod functions doesn't
4 break anything and produces the expected results.
5
6 /* { dg-do link } */
7 /* { dg-options "-O2 -ffast-math" } */
8
9 extern void link_error(void);
10
11 extern double fmod(double,double);
12 extern float fmodf(float,float);
13 extern long double fmodl(long double,long double);
14
15 int main()
16 {
17 if (fmod (6.5, 2.3) < 1.8999 || fmod (6.5, 2.3) > 1.9001)
18 link_error ();
19 if (fmod (-6.5, 2.3) < -1.9001 || fmod (-6.5, 2.3) > -1.8999)
20 link_error ();
21 if (fmod (6.5, -2.3) < 1.8999 || fmod (6.5, -2.3) > 1.9001)
22 link_error ();
23 if (fmod (-6.5, -2.3) < -1.9001 || fmod (-6.5, -2.3) > -1.8999)
24 link_error ();
25
26 if (fmodf (6.5f, 2.3f) < 1.8999f || fmodf (6.5f, 2.3f) > 1.9001f)
27 link_error ();
28 if (fmodf (-6.5f, 2.3f) < -1.9001f || fmodf (-6.5f, 2.3f) > -1.8999f)
29 link_error ();
30 if (fmodf (6.5f, -2.3f) < 1.8999f || fmodf (6.5f, -2.3f) > 1.9001f)
31 link_error ();
32 if (fmodf (-6.5f, -2.3f) < -1.9001f || fmodf (-6.5f, -2.3f) > -1.8999f)
33 link_error ();
34
35 if (fmodl (6.5l, 2.3l) < 1.8999l || fmod (6.5l, 2.3l) > 1.9001l)
36 link_error ();
37 if (fmodl (-6.5l, 2.3l) < -1.9001l || fmod (-6.5l, 2.3l) > -1.8999l)
38 link_error ();
39 if (fmodl (6.5l, -2.3l) < 1.8999l || fmod (6.5l, -2.3l) > 1.9001l)
40 link_error ();
41 if (fmodl (-6.5l, -2.3l) < -1.9001l || fmod (-6.5l, -2.3l) > -1.8999l)
42 link_error ();
43
44 return 0;
45 }
46