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