OSDN Git Service

PR testsuite/24841
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / builtins-26.c
1 /* Copyright (C) 2003 Free Software Foundation.
2
3    Check that constant folding of built-in math functions doesn't
4    break anything and produces the expected results.
5
6    Written by Roger Sayle, 28th June 2003.  */
7
8 /* { dg-do link } */
9 /* { dg-options "-O2 -ffast-math" } */
10
11 extern void link_error(void);
12
13 extern double trunc(double);
14 extern double floor(double);
15 extern double ceil(double);
16
17 extern float truncf(float);
18 extern float floorf(float);
19 extern float ceilf(float);
20
21 extern long double truncl(long double);
22 extern long double floorl(long double);
23 extern long double ceill(long double);
24
25 void test(double x)
26 {
27   if (trunc (trunc (x)) != trunc (x))
28     link_error ();
29   if (trunc (floor (x)) != floor (x))
30     link_error ();
31   if (trunc (ceil (x)) != ceil (x))
32     link_error ();
33
34   if (floor (trunc (x)) != trunc (x))
35     link_error ();
36   if (floor (floor (x)) != floor (x))
37     link_error ();
38   if (floor (ceil (x)) != ceil (x))
39     link_error ();
40
41   if (ceil (trunc (x)) != trunc (x))
42     link_error ();
43   if (ceil (floor (x)) != floor (x))
44     link_error ();
45   if (ceil (ceil (x)) != ceil (x))
46     link_error ();
47 }
48
49 void testf(float x)
50 {
51   if (truncf (truncf (x)) != truncf (x))
52     link_error ();
53   if (truncf (floorf (x)) != floorf (x))
54     link_error ();
55   if (truncf (ceilf (x)) != ceilf (x))
56     link_error ();
57
58   if (floorf (truncf (x)) != truncf (x))
59     link_error ();
60   if (floorf (floorf (x)) != floorf (x))
61     link_error ();
62   if (floorf (ceilf (x)) != ceilf (x))
63     link_error ();
64
65   if (ceilf (truncf (x)) != truncf (x))
66     link_error ();
67   if (ceilf (floorf (x)) != floorf (x))
68     link_error ();
69   if (ceilf (ceilf (x)) != ceilf (x))
70     link_error ();
71 }
72
73 void testl(long double x)
74 {
75   if (truncl (truncl (x)) != truncl (x))
76     link_error ();
77   if (truncl (floorl (x)) != floorl (x))
78     link_error ();
79   if (truncl (ceill (x)) != ceill (x))
80     link_error ();
81
82   if (floorl (truncl (x)) != truncl (x))
83     link_error ();
84   if (floorl (floorl (x)) != floorl (x))
85     link_error ();
86   if (floorl (ceill (x)) != ceill (x))
87     link_error ();
88
89   if (ceill (truncl (x)) != truncl (x))
90     link_error ();
91   if (ceill (floorl (x)) != floorl (x))
92     link_error ();
93   if (ceill (ceill (x)) != ceill (x))
94     link_error ();
95 }
96
97
98 int main()
99 {
100   test (3.2);
101   testf (3.2f);
102   testl (3.2l);
103   return 0;
104 }
105