1 /* Copyright (C) 2003 Free Software Foundation.
2 
3    Check that constant folding of mathematical expressions doesn't
4    break anything.
5 
6    Written by Roger Sayle, 3rd August 2003.  */
7 
8 /* { dg-do link } */
9 /* { dg-options "-O2 -ffast-math" } */
10 
11 extern void link_error(void);
12 
test(double x)13 void test(double x)
14 {
15   if (x+x != 2.0*x)
16     link_error ();
17   if (x+x != x*2.0)
18     link_error ();
19 
20   if (x+x+x != 3.0*x)
21     link_error ();
22   if (x+x+x != x*3.0)
23     link_error ();
24 
25   if ((x+x)+x != 3.0*x)
26     link_error ();
27   if ((x+x)+x != x*3.0)
28     link_error ();
29 
30   if (x+(x+x) != 3.0*x)
31     link_error ();
32   if (x+(x+x) != x*3.0)
33     link_error ();
34 
35   if (x+4.0*x != 5.0*x)
36     link_error ();
37   if (x+4.0*x != x*5.0)
38     link_error ();
39   if (x+x*4.0 != 5.0*x)
40     link_error ();
41   if (x+x*4.0 != x*5.0)
42     link_error ();
43   if (4.0*x+x != 5.0*x)
44     link_error ();
45   if (4.0*x+x != x*5.0)
46     link_error ();
47   if (x*4.0+x != 5.0*x)
48     link_error ();
49   if (x*4.0+x != x*5.0)
50     link_error ();
51 
52   if (3.0*x + 5.0*x != 8.0*x)
53     link_error ();
54   if (3.0*x + 5.0*x != x*8.0)
55     link_error ();
56   if (x*3.0 + 5.0*x != 8.0*x)
57     link_error ();
58   if (x*3.0 + 5.0*x != x*8.0)
59     link_error ();
60   if (3.0*x + x*5.0 != 8.0*x)
61     link_error ();
62   if (3.0*x + x*5.0 != x*8.0)
63     link_error ();
64   if (x*3.0 + x*5.0 != 8.0*x)
65     link_error ();
66   if (x*3.0 + x*5.0 != x*8.0)
67     link_error ();
68 }
69 
main()70 int main()
71 {
72   test(2.0);
73   return 0;
74 }
75 
76