1 /* { dg-do link } */
2 /* { dg-options "-O2 -ffast-math" } */
3
4 double fabs(double);
5 float fabsf(float);
6 long double fabsl(long double);
7 double cabs(__complex__ double);
8 float cabsf(__complex__ float);
9 long double cabsl(__complex__ long double);
10
11 void link_error (void);
12
test(__complex__ double x,double a,double b)13 void test(__complex__ double x, double a, double b)
14 {
15 if (cabs(x) != cabs(-x))
16 link_error();
17
18 if (cabs(x) != cabs(~x))
19 link_error();
20
21 if (fabs(a) * __builtin_sqrt(2) != cabs (a+a*1i))
22 link_error();
23
24 if (fabs(a) * __builtin_sqrt(2) != cabs (a*1i+a))
25 link_error();
26
27 if (fabs(a) * __builtin_sqrt(2) != cabs (-a+a*-1i))
28 link_error();
29
30 if (fabs(a) * __builtin_sqrt(2) != cabs (-a+-a*1i))
31 link_error();
32
33 if (fabs(a) * __builtin_sqrt(2) != cabs (-a-a*1i))
34 link_error();
35
36 if (fabs(a) * __builtin_sqrt(2) != cabs (a*-1i-a))
37 link_error();
38
39 if (fabs(a) * __builtin_sqrt(2) != cabs (-a*1i-a))
40 link_error();
41
42 if (fabs(a) * __builtin_sqrt(2) != cabs (a*-1i+-a))
43 link_error();
44
45 if (fabs(a) * __builtin_sqrt(2) != cabs (-a*1i+-a))
46 link_error();
47
48 if (fabs(a*b) * __builtin_sqrt(2) != cabs (a*b-(-b*a*1i)))
49 link_error();
50
51 if (fabs(a*b) * __builtin_sqrt(2) != cabs (a*b*1i-a*-b))
52 link_error();
53 }
54
testf(__complex__ float x,float a,float b)55 void testf(__complex__ float x, float a, float b)
56 {
57 if (cabsf(x) != cabsf(-x))
58 link_error();
59
60 if (cabsf(x) != cabsf(~x))
61 link_error();
62
63 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (a+a*1i))
64 link_error();
65
66 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (a*1i+a))
67 link_error();
68
69 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (-a+a*-1i))
70 link_error();
71
72 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (-a+-a*1i))
73 link_error();
74
75 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (-a-a*1i))
76 link_error();
77
78 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (a*-1i-a))
79 link_error();
80
81 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (-a*1i-a))
82 link_error();
83
84 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (a*-1i+-a))
85 link_error();
86
87 if (fabsf(a) * __builtin_sqrtf(2) != cabsf (-a*1i+-a))
88 link_error();
89
90 if (fabsf(a*b) * __builtin_sqrtf(2) != cabsf (a*b-(-b*a*1i)))
91 link_error();
92
93 if (fabsf(a*b) * __builtin_sqrtf(2) != cabsf (a*b*1i-a*-b))
94 link_error();
95 }
96
testl(__complex__ long double x,long double a,long double b)97 void testl(__complex__ long double x, long double a, long double b)
98 {
99 if (cabsl(x) != cabsl(-x))
100 link_error();
101
102 if (cabsl(x) != cabsl(~x))
103 link_error();
104
105 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (a+a*1i))
106 link_error();
107
108 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (a*1i+a))
109 link_error();
110
111 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (-a+a*-1i))
112 link_error();
113
114 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (-a+-a*1i))
115 link_error();
116
117 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (-a-a*1i))
118 link_error();
119
120 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (a*-1i-a))
121 link_error();
122
123 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (-a*1i-a))
124 link_error();
125
126 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (a*-1i+-a))
127 link_error();
128
129 if (fabsl(a) * __builtin_sqrtl(2) != cabsl (-a*1i+-a))
130 link_error();
131
132 if (fabsl(a*b) * __builtin_sqrtl(2) != cabsl (a*b-(-b*a*1i)))
133 link_error();
134
135 if (fabsl(a*b) * __builtin_sqrtl(2) != cabsl (a*b*1i-a*-b))
136 link_error();
137 }
138
main()139 int main()
140 {
141 test(0, 0, 0);
142 testf(0, 0, 0);
143 testl(0, 0, 0);
144 return 0;
145 }
146
147