1 // RUN: %clang_cc1 -triple x86_64-apple-darwin12 -S -o - -emit-llvm %s | FileCheck %s -check-prefix=CHECK-NOERRNO
2 // RUN: %clang_cc1 -triple x86_64-linux-gnu -S -o - -emit-llvm -fmath-errno %s | FileCheck %s -check-prefix=CHECK-ERRNO
3 // RUN: %clang_cc1 -triple x86_64-apple-darwin12 -S -o - -emit-llvm -x c++ %s | FileCheck %s -check-prefix=CHECK-NOERRNO
4 // RUN: %clang_cc1 -triple x86_64-linux-gnu -S -o - -emit-llvm -x c++ -fmath-errno %s | FileCheck %s -check-prefix=CHECK-ERRNO
5 
6 // Prototypes.
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 double acos(double);
11 long double acosl(long double);
12 float acosf(float);
13 double asin(double);
14 long double asinl(long double);
15 float asinf(float);
16 double atan(double);
17 long double atanl(long double);
18 float atanf(float);
19 double atan2(double, double);
20 long double atan2l(long double, long double);
21 float atan2f(float, float);
22 double ceil(double);
23 long double ceill(long double);
24 float ceilf(float);
25 double copysign(double, double);
26 long double copysignl(long double, long double);
27 float copysignf(float, float);
28 double cos(double);
29 long double cosl(long double);
30 float cosf(float);
31 double exp(double);
32 long double expl(long double);
33 float expf(float);
34 double exp2(double);
35 long double exp2l(long double);
36 float exp2f(float);
37 double fabs(double);
38 long double fabsl(long double);
39 float fabsf(float);
40 double floor(double);
41 long double floorl(long double);
42 float floorf(float);
43 double fma(double, double, double);
44 long double fmal(long double, long double, long double);
45 float fmaf(float, float, float);
46 double fmax(double, double);
47 long double fmaxl(long double, long double);
48 float fmaxf(float, float);
49 double fmin(double, double);
50 long double fminl(long double, long double);
51 float fminf(float, float);
52 double log(double);
53 long double logl(long double);
54 float logf(float);
55 double log2(double);
56 long double log2l(long double);
57 float log2f(float);
58 long lrint(double);
59 long lrintl(long double);
60 long lrintf(float);
61 double nearbyint(double);
62 long double nearbyintl(long double);
63 float nearbyintf(float);
64 double pow(double, double);
65 long double powl(long double, long double);
66 float powf(float, float);
67 double rint(double);
68 long double rintl(long double);
69 float rintf(float);
70 double round(double);
71 long double roundl(long double);
72 float roundf(float);
73 double sin(double);
74 long double sinl(long double);
75 float sinf(float);
76 double sqrt(double);
77 long double sqrtl(long double);
78 float sqrtf(float);
79 double tan(double);
80 long double tanl(long double);
81 float tanf(float);
82 double trunc(double);
83 long double truncl(long double);
84 float truncf(float);
85 #ifdef __cplusplus
86 }
87 #endif
88 
89 // Force emission of the declare statements.
90 #define F(x) ((void*)x)
91 void *use[] = { F(acos), F(acosl), F(acosf), F(asin), F(asinl), F(asinf),
92                 F(atan), F(atanl), F(atanf), F(atan2), F(atan2l), F(atan2f),
93                 F(ceil), F(ceill), F(ceilf), F(copysign), F(copysignl),
94                 F(copysignf), F(cos), F(cosl), F(cosf), F(exp), F(expl),
95                 F(expf), F(exp2), F(exp2l), F(exp2f), F(fabs), F(fabsl),
96                 F(fabsf), F(floor), F(floorl), F(floorf), F(fma), F(fmal),
97                 F(fmaf), F(fmax), F(fmaxl), F(fmaxf), F(fmin), F(fminl),
98                 F(fminf), F(log), F(logl), F(logf), F(log2), F(log2l),
99                 F(log2f), F(lrint), F(lrintl), F(lrintf), F(nearbyint),
100                 F(nearbyintl), F(nearbyintf), F(pow), F(powl), F(powf),
101                 F(rint), F(rintl), F(rintf), F(round), F(roundl), F(roundf),
102                 F(sin), F(sinl), F(sinf), F(sqrt), F(sqrtl), F(sqrtf), F(tan),
103                 F(tanl), F(tanf), F(trunc), F(truncl), F(truncf) };
104 
105 // CHECK-NOERRNO: declare double @acos(double) [[NUW:#[0-9]+]]
106 // CHECK-NOERRNO: declare x86_fp80 @acosl(x86_fp80) [[NUW]]
107 // CHECK-NOERRNO: declare float @acosf(float) [[NUW]]
108 // CHECK-NOERRNO: declare double @asin(double) [[NUW]]
109 // CHECK-NOERRNO: declare x86_fp80 @asinl(x86_fp80) [[NUW]]
110 // CHECK-NOERRNO: declare float @asinf(float) [[NUW]]
111 // CHECK-NOERRNO: declare double @atan(double) [[NUW]]
112 // CHECK-NOERRNO: declare x86_fp80 @atanl(x86_fp80) [[NUW]]
113 // CHECK-NOERRNO: declare float @atanf(float) [[NUW]]
114 // CHECK-NOERRNO: declare double @atan2(double, double) [[NUW]]
115 // CHECK-NOERRNO: declare x86_fp80 @atan2l(x86_fp80, x86_fp80) [[NUW]]
116 // CHECK-NOERRNO: declare float @atan2f(float, float) [[NUW]]
117 // CHECK-NOERRNO: declare double @ceil(double) [[NUW]]
118 // CHECK-NOERRNO: declare x86_fp80 @ceill(x86_fp80) [[NUW]]
119 // CHECK-NOERRNO: declare float @ceilf(float) [[NUW]]
120 // CHECK-NOERRNO: declare double @copysign(double, double) [[NUW]]
121 // CHECK-NOERRNO: declare x86_fp80 @copysignl(x86_fp80, x86_fp80) [[NUW]]
122 // CHECK-NOERRNO: declare float @copysignf(float, float) [[NUW]]
123 // CHECK-NOERRNO: declare double @cos(double) [[NUW]]
124 // CHECK-NOERRNO: declare x86_fp80 @cosl(x86_fp80) [[NUW]]
125 // CHECK-NOERRNO: declare float @cosf(float) [[NUW]]
126 // CHECK-NOERRNO: declare double @exp(double) [[NUW]]
127 // CHECK-NOERRNO: declare x86_fp80 @expl(x86_fp80) [[NUW]]
128 // CHECK-NOERRNO: declare float @expf(float) [[NUW]]
129 // CHECK-NOERRNO: declare double @exp2(double) [[NUW]]
130 // CHECK-NOERRNO: declare x86_fp80 @exp2l(x86_fp80) [[NUW]]
131 // CHECK-NOERRNO: declare float @exp2f(float) [[NUW]]
132 // CHECK-NOERRNO: declare double @fabs(double) [[NUW]]
133 // CHECK-NOERRNO: declare x86_fp80 @fabsl(x86_fp80) [[NUW]]
134 // CHECK-NOERRNO: declare float @fabsf(float) [[NUW]]
135 // CHECK-NOERRNO: declare double @floor(double) [[NUW]]
136 // CHECK-NOERRNO: declare x86_fp80 @floorl(x86_fp80) [[NUW]]
137 // CHECK-NOERRNO: declare float @floorf(float) [[NUW]]
138 // CHECK-NOERRNO: declare double @fma(double, double, double) [[NUW]]
139 // CHECK-NOERRNO: declare x86_fp80 @fmal(x86_fp80, x86_fp80, x86_fp80) [[NUW]]
140 // CHECK-NOERRNO: declare float @fmaf(float, float, float) [[NUW]]
141 // CHECK-NOERRNO: declare double @fmax(double, double) [[NUW]]
142 // CHECK-NOERRNO: declare x86_fp80 @fmaxl(x86_fp80, x86_fp80) [[NUW]]
143 // CHECK-NOERRNO: declare float @fmaxf(float, float) [[NUW]]
144 // CHECK-NOERRNO: declare double @fmin(double, double) [[NUW]]
145 // CHECK-NOERRNO: declare x86_fp80 @fminl(x86_fp80, x86_fp80) [[NUW]]
146 // CHECK-NOERRNO: declare float @fminf(float, float) [[NUW]]
147 // CHECK-NOERRNO: declare double @log(double) [[NUW]]
148 // CHECK-NOERRNO: declare x86_fp80 @logl(x86_fp80) [[NUW]]
149 // CHECK-NOERRNO: declare float @logf(float) [[NUW]]
150 // CHECK-NOERRNO: declare double @log2(double) [[NUW]]
151 // CHECK-NOERRNO: declare x86_fp80 @log2l(x86_fp80) [[NUW]]
152 // CHECK-NOERRNO: declare float @log2f(float) [[NUW]]
153 // CHECK-NOERRNO: declare {{i..}} @lrint(double) [[NUW]]
154 // CHECK-NOERRNO: declare {{i..}} @lrintl(x86_fp80) [[NUW]]
155 // CHECK-NOERRNO: declare {{i..}} @lrintf(float) [[NUW]]
156 // CHECK-NOERRNO: declare double @nearbyint(double) [[NUW]]
157 // CHECK-NOERRNO: declare x86_fp80 @nearbyintl(x86_fp80) [[NUW]]
158 // CHECK-NOERRNO: declare float @nearbyintf(float) [[NUW]]
159 // CHECK-NOERRNO: declare double @pow(double, double) [[NUW]]
160 // CHECK-NOERRNO: declare x86_fp80 @powl(x86_fp80, x86_fp80) [[NUW]]
161 // CHECK-NOERRNO: declare float @powf(float, float) [[NUW]]
162 // CHECK-NOERRNO: declare double @rint(double) [[NUW]]
163 // CHECK-NOERRNO: declare x86_fp80 @rintl(x86_fp80) [[NUW]]
164 // CHECK-NOERRNO: declare float @rintf(float) [[NUW]]
165 // CHECK-NOERRNO: declare double @round(double) [[NUW]]
166 // CHECK-NOERRNO: declare x86_fp80 @roundl(x86_fp80) [[NUW]]
167 // CHECK-NOERRNO: declare float @roundf(float) [[NUW]]
168 // CHECK-NOERRNO: declare double @sin(double) [[NUW]]
169 // CHECK-NOERRNO: declare x86_fp80 @sinl(x86_fp80) [[NUW]]
170 // CHECK-NOERRNO: declare float @sinf(float) [[NUW]]
171 // CHECK-NOERRNO: declare double @sqrt(double) [[NUW]]
172 // CHECK-NOERRNO: declare x86_fp80 @sqrtl(x86_fp80) [[NUW]]
173 // CHECK-NOERRNO: declare float @sqrtf(float) [[NUW]]
174 // CHECK-NOERRNO: declare double @tan(double) [[NUW]]
175 // CHECK-NOERRNO: declare x86_fp80 @tanl(x86_fp80) [[NUW]]
176 // CHECK-NOERRNO: declare float @tanf(float) [[NUW]]
177 // CHECK-NOERRNO: declare double @trunc(double) [[NUW]]
178 // CHECK-NOERRNO: declare x86_fp80 @truncl(x86_fp80) [[NUW]]
179 // CHECK-NOERRNO: declare float @truncf(float) [[NUW]]
180 
181 // CHECK-ERRNO: declare double @ceil(double) [[NUW:#[0-9]+]]
182 // CHECK-ERRNO: declare x86_fp80 @ceill(x86_fp80) [[NUW]]
183 // CHECK-ERRNO: declare float @ceilf(float) [[NUW]]
184 // CHECK-ERRNO: declare double @copysign(double, double) [[NUW]]
185 // CHECK-ERRNO: declare x86_fp80 @copysignl(x86_fp80, x86_fp80) [[NUW]]
186 // CHECK-ERRNO: declare float @copysignf(float, float) [[NUW]]
187 // CHECK-ERRNO: declare double @fabs(double) [[NUW]]
188 // CHECK-ERRNO: declare x86_fp80 @fabsl(x86_fp80) [[NUW]]
189 // CHECK-ERRNO: declare float @fabsf(float) [[NUW]]
190 // CHECK-ERRNO: declare double @floor(double) [[NUW]]
191 // CHECK-ERRNO: declare x86_fp80 @floorl(x86_fp80) [[NUW]]
192 // CHECK-ERRNO: declare float @floorf(float) [[NUW]]
193 // CHECK-ERRNO: declare double @fmax(double, double) [[NUW]]
194 // CHECK-ERRNO: declare x86_fp80 @fmaxl(x86_fp80, x86_fp80) [[NUW]]
195 // CHECK-ERRNO: declare float @fmaxf(float, float) [[NUW]]
196 // CHECK-ERRNO: declare double @fmin(double, double) [[NUW]]
197 // CHECK-ERRNO: declare x86_fp80 @fminl(x86_fp80, x86_fp80) [[NUW]]
198 // CHECK-ERRNO: declare float @fminf(float, float) [[NUW]]
199 // CHECK-ERRNO: declare {{i..}} @lrint(double) [[NUW]]
200 // CHECK-ERRNO: declare {{i..}} @lrintl(x86_fp80) [[NUW]]
201 // CHECK-ERRNO: declare {{i..}} @lrintf(float) [[NUW]]
202 // CHECK-ERRNO: declare double @nearbyint(double) [[NUW]]
203 // CHECK-ERRNO: declare x86_fp80 @nearbyintl(x86_fp80) [[NUW]]
204 // CHECK-ERRNO: declare float @nearbyintf(float) [[NUW]]
205 // CHECK-ERRNO: declare double @rint(double) [[NUW]]
206 // CHECK-ERRNO: declare x86_fp80 @rintl(x86_fp80) [[NUW]]
207 // CHECK-ERRNO: declare float @rintf(float) [[NUW]]
208 // CHECK-ERRNO: declare double @round(double) [[NUW]]
209 // CHECK-ERRNO: declare x86_fp80 @roundl(x86_fp80) [[NUW]]
210 // CHECK-ERRNO: declare float @roundf(float) [[NUW]]
211 // CHECK-ERRNO: declare double @trunc(double) [[NUW]]
212 // CHECK-ERRNO: declare x86_fp80 @truncl(x86_fp80) [[NUW]]
213 // CHECK-ERRNO: declare float @truncf(float) [[NUW]]
214 
215 // CHECK-NOERRNO: attributes [[NUW]] = { nounwind readnone{{.*}} }
216 
217 // CHECK-ERRNO: attributes [[NUW]] = { nounwind readnone{{.*}} }
218