1; RUN: opt < %s -mtriple=x86_64-- -inferattrs -S | FileCheck --match-full-lines --check-prefixes=CHECK,CHECK-NOLINUX,CHECK-OPEN,CHECK-UNKNOWN %s
2; RUN: opt < %s -mtriple=x86_64-- -passes=inferattrs -S | FileCheck --match-full-lines --check-prefixes=CHECK,CHECK-NOLINUX,CHECK-OPEN,CHECK-UNKNOWN %s
3; RUN: opt < %s -mtriple=x86_64-apple-macosx10.8.0 -inferattrs -S | FileCheck --match-full-lines --check-prefixes=CHECK,CHECK-KNOWN,CHECK-NOLINUX,CHECK-OPEN,CHECK-DARWIN %s
4; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -inferattrs -S | FileCheck --match-full-lines --check-prefixes=CHECK,CHECK-KNOWN,CHECK-LINUX %s
5; RUN: opt < %s -mtriple=nvptx -inferattrs -S | FileCheck --match-full-lines --check-prefixes=CHECK-NOLINUX,CHECK-NVPTX %s
6
7declare i32 @__nvvm_reflect(i8*)
8; CHECK-NVPTX: declare noundef i32 @__nvvm_reflect(i8* noundef) [[NOFREE_NOUNWIND_READNONE:#[0-9]+]]
9
10
11; Check all the libc functions (thereby also exercising the prototype check).
12; Note that it's OK to modify these as attributes might be missing. These checks
13; reflect the currently inferred attributes.
14
15; Use an opaque pointer type for all the (possibly opaque) structs.
16%opaque = type opaque
17
18; CHECK-LINUX: declare double @__acos_finite(double) [[NOFREE:#[0-9]+]]
19; CHECK-NOLINUX: declare double @__acos_finite(double)
20declare double @__acos_finite(double)
21
22; CHECK-LINUX: declare float @__acosf_finite(float) [[NOFREE]]
23; CHECK-NOLINUX: declare float @__acosf_finite(float)
24declare float @__acosf_finite(float)
25
26; CHECK-LINUX: declare double @__acosh_finite(double) [[NOFREE]]
27; CHECK-NOLINUX: declare double @__acosh_finite(double)
28declare double @__acosh_finite(double)
29
30; CHECK-LINUX: declare float @__acoshf_finite(float) [[NOFREE]]
31; CHECK-NOLINUX: declare float @__acoshf_finite(float)
32declare float @__acoshf_finite(float)
33
34; CHECK-LINUX: declare x86_fp80 @__acoshl_finite(x86_fp80) [[NOFREE]]
35; CHECK-NOLINUX: declare x86_fp80 @__acoshl_finite(x86_fp80)
36declare x86_fp80 @__acoshl_finite(x86_fp80)
37
38; CHECK-LINUX: declare x86_fp80 @__acosl_finite(x86_fp80) [[NOFREE]]
39; CHECK-NOLINUX: declare x86_fp80 @__acosl_finite(x86_fp80)
40declare x86_fp80 @__acosl_finite(x86_fp80)
41
42; CHECK-LINUX: declare double @__asin_finite(double) [[NOFREE]]
43; CHECK-NOLINUX: declare double @__asin_finite(double)
44declare double @__asin_finite(double)
45
46; CHECK-LINUX: declare float @__asinf_finite(float) [[NOFREE]]
47; CHECK-NOLINUX: declare float @__asinf_finite(float)
48declare float @__asinf_finite(float)
49
50; CHECK-LINUX: declare x86_fp80 @__asinl_finite(x86_fp80) [[NOFREE]]
51; CHECK-NOLINUX: declare x86_fp80 @__asinl_finite(x86_fp80)
52declare x86_fp80 @__asinl_finite(x86_fp80)
53
54; CHECK-LINUX: declare double @__atan2_finite(double, double) [[NOFREE]]
55; CHECK-NOLINUX: declare double @__atan2_finite(double, double)
56declare double @__atan2_finite(double, double)
57
58; CHECK-LINUX: declare float @__atan2f_finite(float, float) [[NOFREE]]
59; CHECK-NOLINUX: declare float @__atan2f_finite(float, float)
60declare float @__atan2f_finite(float, float)
61
62; CHECK-LINUX: declare x86_fp80 @__atan2l_finite(x86_fp80, x86_fp80) [[NOFREE]]
63; CHECK-NOLINUX: declare x86_fp80 @__atan2l_finite(x86_fp80, x86_fp80)
64declare x86_fp80 @__atan2l_finite(x86_fp80, x86_fp80)
65
66; CHECK-LINUX: declare double @__atanh_finite(double) [[NOFREE]]
67; CHECK-NOLINUX: declare double @__atanh_finite(double)
68declare double @__atanh_finite(double)
69
70; CHECK-LINUX: declare float @__atanhf_finite(float) [[NOFREE]]
71; CHECK-NOLINUX: declare float @__atanhf_finite(float)
72declare float @__atanhf_finite(float)
73
74; CHECK-LINUX: declare x86_fp80 @__atanhl_finite(x86_fp80) [[NOFREE]]
75; CHECK-NOLINUX: declare x86_fp80 @__atanhl_finite(x86_fp80)
76declare x86_fp80 @__atanhl_finite(x86_fp80)
77
78; CHECK-LINUX: declare double @__cosh_finite(double) [[NOFREE]]
79; CHECK-NOLINUX: declare double @__cosh_finite(double)
80declare double @__cosh_finite(double)
81
82; CHECK-LINUX: declare float @__coshf_finite(float) [[NOFREE]]
83; CHECK-NOLINUX: declare float @__coshf_finite(float)
84declare float @__coshf_finite(float)
85
86; CHECK-LINUX: declare x86_fp80 @__coshl_finite(x86_fp80) [[NOFREE]]
87; CHECK-NOLINUX: declare x86_fp80 @__coshl_finite(x86_fp80)
88declare x86_fp80 @__coshl_finite(x86_fp80)
89
90; CHECK: declare double @__cospi(double)
91declare double @__cospi(double)
92
93; CHECK: declare float @__cospif(float)
94declare float @__cospif(float)
95
96; CHECK-LINUX: declare double @__exp10_finite(double) [[NOFREE]]
97; CHECK-NOLINUX: declare double @__exp10_finite(double)
98declare double @__exp10_finite(double)
99
100; CHECK-LINUX: declare float @__exp10f_finite(float) [[NOFREE]]
101; CHECK-NOLINUX: declare float @__exp10f_finite(float)
102declare float @__exp10f_finite(float)
103
104; CHECK-LINUX: declare x86_fp80 @__exp10l_finite(x86_fp80) [[NOFREE]]
105; CHECK-NOLINUX: declare x86_fp80 @__exp10l_finite(x86_fp80)
106declare x86_fp80 @__exp10l_finite(x86_fp80)
107
108; CHECK-LINUX: declare double @__exp2_finite(double) [[NOFREE]]
109; CHECK-NOLINUX: declare double @__exp2_finite(double)
110declare double @__exp2_finite(double)
111
112; CHECK-LINUX: declare float @__exp2f_finite(float) [[NOFREE]]
113; CHECK-NOLINUX: declare float @__exp2f_finite(float)
114declare float @__exp2f_finite(float)
115
116; CHECK-LINUX: declare x86_fp80 @__exp2l_finite(x86_fp80) [[NOFREE]]
117; CHECK-NOLINUX: declare x86_fp80 @__exp2l_finite(x86_fp80)
118declare x86_fp80 @__exp2l_finite(x86_fp80)
119
120; CHECK-LINUX: declare double @__exp_finite(double) [[NOFREE]]
121; CHECK-NOLINUX: declare double @__exp_finite(double)
122declare double @__exp_finite(double)
123
124; CHECK-LINUX: declare float @__expf_finite(float) [[NOFREE]]
125; CHECK-NOLINUX: declare float @__expf_finite(float)
126declare float @__expf_finite(float)
127
128; CHECK-LINUX: declare x86_fp80 @__expl_finite(x86_fp80) [[NOFREE]]
129; CHECK-NOLINUX: declare x86_fp80 @__expl_finite(x86_fp80)
130declare x86_fp80 @__expl_finite(x86_fp80)
131
132; CHECK-LINUX: declare double @__log10_finite(double) [[NOFREE]]
133; CHECK-NOLINUX: declare double @__log10_finite(double)
134declare double @__log10_finite(double)
135
136; CHECK-LINUX: declare float @__log10f_finite(float) [[NOFREE]]
137; CHECK-NOLINUX: declare float @__log10f_finite(float)
138declare float @__log10f_finite(float)
139
140; CHECK-LINUX: declare x86_fp80 @__log10l_finite(x86_fp80) [[NOFREE]]
141; CHECK-NOLINUX: declare x86_fp80 @__log10l_finite(x86_fp80)
142declare x86_fp80 @__log10l_finite(x86_fp80)
143
144; CHECK-LINUX: declare double @__log2_finite(double) [[NOFREE]]
145; CHECK-NOLINUX: declare double @__log2_finite(double)
146declare double @__log2_finite(double)
147
148; CHECK-LINUX: declare float @__log2f_finite(float) [[NOFREE]]
149; CHECK-NOLINUX: declare float @__log2f_finite(float)
150declare float @__log2f_finite(float)
151
152; CHECK-LINUX: declare x86_fp80 @__log2l_finite(x86_fp80) [[NOFREE]]
153; CHECK-NOLINUX: declare x86_fp80 @__log2l_finite(x86_fp80)
154declare x86_fp80 @__log2l_finite(x86_fp80)
155
156; CHECK-LINUX: declare double @__log_finite(double) [[NOFREE]]
157; CHECK-NOLINUX: declare double @__log_finite(double)
158declare double @__log_finite(double)
159
160; CHECK-LINUX: declare float @__logf_finite(float) [[NOFREE]]
161; CHECK-NOLINUX: declare float @__logf_finite(float)
162declare float @__logf_finite(float)
163
164; CHECK-LINUX: declare x86_fp80 @__logl_finite(x86_fp80) [[NOFREE]]
165; CHECK-NOLINUX: declare x86_fp80 @__logl_finite(x86_fp80)
166declare x86_fp80 @__logl_finite(x86_fp80)
167
168; CHECK-LINUX: declare double @__pow_finite(double, double) [[NOFREE]]
169; CHECK-NOLINUX: declare double @__pow_finite(double, double)
170declare double @__pow_finite(double, double)
171
172; CHECK-LINUX: declare float @__powf_finite(float, float) [[NOFREE]]
173; CHECK-NOLINUX: declare float @__powf_finite(float, float)
174declare float @__powf_finite(float, float)
175
176; CHECK-LINUX: declare x86_fp80 @__powl_finite(x86_fp80, x86_fp80) [[NOFREE]]
177; CHECK-NOLINUX: declare x86_fp80 @__powl_finite(x86_fp80, x86_fp80)
178declare x86_fp80 @__powl_finite(x86_fp80, x86_fp80)
179
180; CHECK-LINUX: declare double @__sinh_finite(double) [[NOFREE]]
181; CHECK-NOLINUX: declare double @__sinh_finite(double)
182declare double @__sinh_finite(double)
183
184; CHECK-LINUX: declare float @__sinhf_finite(float) [[NOFREE]]
185; CHECK-NOLINUX: declare float @__sinhf_finite(float)
186declare float @__sinhf_finite(float)
187
188; CHECK-LINUX: declare x86_fp80 @__sinhl_finite(x86_fp80) [[NOFREE]]
189; CHECK-NOLINUX: declare x86_fp80 @__sinhl_finite(x86_fp80)
190declare x86_fp80 @__sinhl_finite(x86_fp80)
191
192; CHECK: declare double @__sinpi(double)
193declare double @__sinpi(double)
194
195; CHECK: declare float @__sinpif(float)
196declare float @__sinpif(float)
197
198; CHECK: declare i32 @abs(i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY:#[0-9]+]]
199declare i32 @abs(i32)
200
201; CHECK: declare noundef i32 @access(i8* nocapture noundef readonly, i32 noundef) [[NOFREE_NOUNWIND:#[0-9]+]]
202declare i32 @access(i8*, i32)
203
204; CHECK: declare double @acos(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
205declare double @acos(double)
206
207; CHECK: declare float @acosf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
208declare float @acosf(float)
209
210; CHECK: declare double @acosh(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
211declare double @acosh(double)
212
213; CHECK: declare float @acoshf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
214declare float @acoshf(float)
215
216; CHECK: declare x86_fp80 @acoshl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
217declare x86_fp80 @acoshl(x86_fp80)
218
219; CHECK: declare x86_fp80 @acosl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
220declare x86_fp80 @acosl(x86_fp80)
221
222; CHECK: declare noalias noundef i8* @aligned_alloc(i64 noundef, i64 noundef) [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND:#[0-9]+]]
223declare i8* @aligned_alloc(i64, i64)
224
225; CHECK: declare double @asin(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
226declare double @asin(double)
227
228; CHECK: declare float @asinf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
229declare float @asinf(float)
230
231; CHECK: declare double @asinh(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
232declare double @asinh(double)
233
234; CHECK: declare float @asinhf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
235declare float @asinhf(float)
236
237; CHECK: declare x86_fp80 @asinhl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
238declare x86_fp80 @asinhl(x86_fp80)
239
240; CHECK: declare x86_fp80 @asinl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
241declare x86_fp80 @asinl(x86_fp80)
242
243; CHECK: declare double @atan(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
244declare double @atan(double)
245
246; CHECK: declare double @atan2(double, double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
247declare double @atan2(double, double)
248
249; CHECK: declare float @atan2f(float, float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
250declare float @atan2f(float, float)
251
252; CHECK: declare x86_fp80 @atan2l(x86_fp80, x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
253declare x86_fp80 @atan2l(x86_fp80, x86_fp80)
254
255; CHECK: declare float @atanf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
256declare float @atanf(float)
257
258; CHECK: declare double @atanh(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
259declare double @atanh(double)
260
261; CHECK: declare float @atanhf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
262declare float @atanhf(float)
263
264; CHECK: declare x86_fp80 @atanhl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
265declare x86_fp80 @atanhl(x86_fp80)
266
267; CHECK: declare x86_fp80 @atanl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
268declare x86_fp80 @atanl(x86_fp80)
269
270; CHECK: declare double @atof(i8* nocapture) [[NOFREE_NOUNWIND_READONLY_WILLRETURN:#[0-9]+]]
271declare double @atof(i8*)
272
273; CHECK: declare i32 @atoi(i8* nocapture) [[NOFREE_NOUNWIND_READONLY_WILLRETURN]]
274declare i32 @atoi(i8*)
275
276; CHECK: declare i64 @atol(i8* nocapture) [[NOFREE_NOUNWIND_READONLY_WILLRETURN]]
277declare i64 @atol(i8*)
278
279; CHECK: declare i64 @atoll(i8* nocapture) [[NOFREE_NOUNWIND_READONLY_WILLRETURN]]
280declare i64 @atoll(i8*)
281
282; CHECK-LINUX: declare i32 @bcmp(i8* nocapture, i8* nocapture, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY:#[0-9]+]]
283; CHECK-NOLINUX: declare i32 @bcmp(i8*, i8*, i64){{$}}
284declare i32 @bcmp(i8*, i8*, i64)
285
286; CHECK: declare void @bcopy(i8* nocapture readonly, i8* nocapture writeonly, i64)  [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
287declare void @bcopy(i8*, i8*, i64)
288
289; CHECK: declare void @bzero(i8* nocapture writeonly, i64)  [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
290declare void @bzero(i8*, i64)
291
292; CHECK: declare noalias noundef i8* @calloc(i64 noundef, i64 noundef) [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
293declare i8* @calloc(i64, i64)
294
295; CHECK: declare double @cbrt(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
296declare double @cbrt(double)
297
298; CHECK: declare float @cbrtf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
299declare float @cbrtf(float)
300
301; CHECK: declare x86_fp80 @cbrtl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
302declare x86_fp80 @cbrtl(x86_fp80)
303
304; CHECK: declare double @ceil(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
305declare double @ceil(double)
306
307; CHECK: declare float @ceilf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
308declare float @ceilf(float)
309
310; CHECK: declare x86_fp80 @ceill(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
311declare x86_fp80 @ceill(x86_fp80)
312
313; CHECK: declare noundef i32 @chmod(i8* nocapture noundef readonly, i16 noundef zeroext) [[NOFREE_NOUNWIND]]
314declare i32 @chmod(i8*, i16 zeroext)
315
316; CHECK: declare noundef i32 @chown(i8* nocapture noundef readonly, i32 noundef, i32 noundef) [[NOFREE_NOUNWIND]]
317declare i32 @chown(i8*, i32, i32)
318
319; CHECK: declare void @clearerr(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
320declare void @clearerr(%opaque*)
321
322; CHECK: declare noundef i32 @closedir(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
323declare i32 @closedir(%opaque*)
324
325; CHECK: declare double @copysign(double, double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
326declare double @copysign(double, double)
327
328; CHECK: declare float @copysignf(float, float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
329declare float @copysignf(float, float)
330
331; CHECK: declare x86_fp80 @copysignl(x86_fp80, x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
332declare x86_fp80 @copysignl(x86_fp80, x86_fp80)
333
334; CHECK: declare double @cos(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
335declare double @cos(double)
336
337; CHECK: declare float @cosf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
338declare float @cosf(float)
339
340; CHECK: declare double @cosh(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
341declare double @cosh(double)
342
343; CHECK: declare float @coshf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
344declare float @coshf(float)
345
346; CHECK: declare x86_fp80 @coshl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
347declare x86_fp80 @coshl(x86_fp80)
348
349; CHECK: declare x86_fp80 @cosl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
350declare x86_fp80 @cosl(x86_fp80)
351
352; CHECK: declare noundef i8* @ctermid(i8* nocapture noundef) [[NOFREE_NOUNWIND]]
353declare i8* @ctermid(i8*)
354
355; CHECK: declare double @exp(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
356declare double @exp(double)
357
358; CHECK: declare double @exp2(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
359declare double @exp2(double)
360
361; CHECK: declare float @exp2f(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
362declare float @exp2f(float)
363
364; CHECK: declare x86_fp80 @exp2l(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
365declare x86_fp80 @exp2l(x86_fp80)
366
367; CHECK: declare float @expf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
368declare float @expf(float)
369
370; CHECK: declare x86_fp80 @expl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
371declare x86_fp80 @expl(x86_fp80)
372
373; CHECK: declare double @expm1(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
374declare double @expm1(double)
375
376; CHECK: declare float @expm1f(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
377declare float @expm1f(float)
378
379; CHECK: declare x86_fp80 @expm1l(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
380declare x86_fp80 @expm1l(x86_fp80)
381
382; CHECK: declare double @fabs(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
383declare double @fabs(double)
384
385; CHECK: declare float @fabsf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
386declare float @fabsf(float)
387
388; CHECK: declare x86_fp80 @fabsl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
389declare x86_fp80 @fabsl(x86_fp80)
390
391; CHECK: declare noundef i32 @fclose(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
392declare i32 @fclose(%opaque*)
393
394; CHECK: declare noalias noundef %opaque* @fdopen(i32 noundef, i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
395declare %opaque* @fdopen(i32, i8*)
396
397; CHECK: declare noundef i32 @feof(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
398declare i32 @feof(%opaque*)
399
400; CHECK: declare noundef i32 @ferror(%opaque* nocapture noundef) [[NOFREE_NOUNWIND_READONLY:#[0-9]+]]
401declare i32 @ferror(%opaque*)
402
403; CHECK: declare noundef i32 @fflush(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
404declare i32 @fflush(%opaque*)
405
406; CHECK: declare i32 @ffs(i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
407declare i32 @ffs(i32)
408
409; CHECK-KNOWN: declare i32 @ffsl(i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
410; CHECK-UNKNOWN: declare i32 @ffsl(i64){{$}}
411declare i32 @ffsl(i64)
412
413; CHECK-KNOWN: declare i32 @ffsll(i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
414; CHECK-UNKNOWN: declare i32 @ffsll(i64){{$}}
415declare i32 @ffsll(i64)
416
417; CHECK: declare noundef i32 @fgetc(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
418declare i32 @fgetc(%opaque*)
419
420; CHECK: declare noundef i32 @fgetpos(%opaque* nocapture noundef, i64* nocapture noundef) [[NOFREE_NOUNWIND]]
421declare i32 @fgetpos(%opaque*, i64*)
422
423; CHECK: declare noundef i8* @fgets(i8* noundef, i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
424declare i8* @fgets(i8*, i32, %opaque*)
425
426; CHECK: declare noundef i32 @fileno(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
427declare i32 @fileno(%opaque*)
428
429; CHECK: declare void @flockfile(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
430declare void @flockfile(%opaque*)
431
432; CHECK: declare double @floor(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
433declare double @floor(double)
434
435; CHECK: declare float @floorf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
436declare float @floorf(float)
437
438; CHECK: declare x86_fp80 @floorl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
439declare x86_fp80 @floorl(x86_fp80)
440
441; CHECK: declare i32 @fls(i32)
442declare i32 @fls(i32)
443
444; CHECK: declare i32 @flsl(i64)
445declare i32 @flsl(i64)
446
447; CHECK: declare i32 @flsll(i64)
448declare i32 @flsll(i64)
449
450; CHECK: declare double @fmax(double, double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
451declare double @fmax(double, double)
452
453; CHECK: declare float @fmaxf(float, float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
454declare float @fmaxf(float, float)
455
456; CHECK: declare x86_fp80 @fmaxl(x86_fp80, x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
457declare x86_fp80 @fmaxl(x86_fp80, x86_fp80)
458
459; CHECK: declare double @fmin(double, double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
460declare double @fmin(double, double)
461
462; CHECK: declare float @fminf(float, float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
463declare float @fminf(float, float)
464
465; CHECK: declare x86_fp80 @fminl(x86_fp80, x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
466declare x86_fp80 @fminl(x86_fp80, x86_fp80)
467
468; CHECK: declare double @fmod(double, double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
469declare double @fmod(double, double)
470
471; CHECK: declare float @fmodf(float, float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
472declare float @fmodf(float, float)
473
474; CHECK: declare x86_fp80 @fmodl(x86_fp80, x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
475declare x86_fp80 @fmodl(x86_fp80, x86_fp80)
476
477; CHECK: declare noalias noundef %opaque* @fopen(i8* nocapture noundef readonly, i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
478declare %opaque* @fopen(i8*, i8*)
479
480; CHECK: declare noundef i32 @fprintf(%opaque* nocapture noundef, i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
481declare i32 @fprintf(%opaque*, i8*, ...)
482
483; CHECK: declare noundef i32 @fputc(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
484declare i32 @fputc(i32, %opaque*)
485
486; CHECK: declare noundef i32 @fputs(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
487declare i32 @fputs(i8*, %opaque*)
488
489; CHECK: declare noundef i64 @fread(i8* nocapture noundef, i64 noundef, i64 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
490declare i64 @fread(i8*, i64, i64, %opaque*)
491
492; CHECK: declare void @free(i8* nocapture noundef) [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND_WILLRETURN:#[0-9]+]]
493declare void @free(i8*)
494
495; CHECK: declare double @frexp(double, i32* nocapture) [[NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
496declare double @frexp(double, i32*)
497
498; CHECK: declare float @frexpf(float, i32* nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
499declare float @frexpf(float, i32*)
500
501; CHECK: declare x86_fp80 @frexpl(x86_fp80, i32* nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
502declare x86_fp80 @frexpl(x86_fp80, i32*)
503
504; CHECK: declare noundef i32 @fscanf(%opaque* nocapture noundef, i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
505declare i32 @fscanf(%opaque*, i8*, ...)
506
507; CHECK: declare noundef i32 @fseek(%opaque* nocapture noundef, i64 noundef, i32 noundef) [[NOFREE_NOUNWIND]]
508declare i32 @fseek(%opaque*, i64, i32)
509
510; CHECK: declare noundef i32 @fseeko(%opaque* nocapture noundef, i64 noundef, i32 noundef) [[NOFREE_NOUNWIND]]
511declare i32 @fseeko(%opaque*, i64, i32)
512
513; CHECK-LINUX: declare noundef i32 @fseeko64(%opaque* nocapture noundef, i64 noundef, i32 noundef) [[NOFREE_NOUNWIND]]
514declare i32 @fseeko64(%opaque*, i64, i32)
515
516; CHECK: declare noundef i32 @fsetpos(%opaque* nocapture noundef, i64* noundef) [[NOFREE_NOUNWIND]]
517declare i32 @fsetpos(%opaque*, i64*)
518
519; CHECK: declare noundef i32 @fstat(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
520declare i32 @fstat(i32, %opaque*)
521
522; CHECK-LINUX: declare noundef i32 @fstat64(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
523declare i32 @fstat64(i32, %opaque*)
524
525; CHECK: declare noundef i32 @fstatvfs(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
526declare i32 @fstatvfs(i32, %opaque*)
527
528; CHECK-LINUX: declare noundef i32 @fstatvfs64(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
529declare i32 @fstatvfs64(i32, %opaque*)
530
531; CHECK: declare noundef i64 @ftell(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
532declare i64 @ftell(%opaque*)
533
534; CHECK: declare noundef i64 @ftello(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
535declare i64 @ftello(%opaque*)
536
537; CHECK-LINUX: declare noundef i64 @ftello64(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
538declare i64 @ftello64(%opaque*)
539
540; CHECK: declare noundef i32 @ftrylockfile(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
541declare i32 @ftrylockfile(%opaque*)
542
543; CHECK: declare void @funlockfile(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
544declare void @funlockfile(%opaque*)
545
546; CHECK: declare noundef i64 @fwrite(i8* nocapture noundef, i64 noundef, i64 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
547declare i64 @fwrite(i8*, i64, i64, %opaque*)
548
549; CHECK: declare noundef i32 @getc(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
550declare i32 @getc(%opaque*)
551
552; CHECK-KNOWN: declare noundef i32 @getc_unlocked(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
553; CHECK-UNKNOWN: declare i32 @getc_unlocked(%opaque*){{$}}
554declare i32 @getc_unlocked(%opaque*)
555
556; CHECK: declare noundef i32 @getchar() [[NOFREE_NOUNWIND]]
557declare i32 @getchar()
558
559; CHECK-KNOWN: declare noundef i32 @getchar_unlocked() [[NOFREE_NOUNWIND]]
560; CHECK-UNKNOWN: declare i32 @getchar_unlocked(){{$}}
561declare i32 @getchar_unlocked()
562
563; CHECK: declare noundef i8* @getenv(i8* nocapture noundef) [[NOFREE_NOUNWIND_READONLY]]
564declare i8* @getenv(i8*)
565
566; CHECK: declare noundef i32 @getitimer(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
567declare i32 @getitimer(i32, %opaque*)
568
569; CHECK: declare noundef i32 @getlogin_r(i8* nocapture noundef, i64 noundef) [[NOFREE_NOUNWIND]]
570declare i32 @getlogin_r(i8*, i64)
571
572; CHECK: declare noundef %opaque* @getpwnam(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
573declare %opaque* @getpwnam(i8*)
574
575; CHECK: declare noundef i8* @gets(i8* noundef) [[NOFREE_NOUNWIND]]
576declare i8* @gets(i8*)
577
578; CHECK: declare noundef i32 @gettimeofday(%opaque* nocapture noundef, i8* nocapture noundef) [[NOFREE_NOUNWIND]]
579declare i32 @gettimeofday(%opaque*, i8*)
580
581; CHECK: declare i32 @isascii(i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
582declare i32 @isascii(i32)
583
584; CHECK: declare i32 @isdigit(i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
585declare i32 @isdigit(i32)
586
587; CHECK: declare i64 @labs(i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
588declare i64 @labs(i64)
589
590; CHECK: declare noundef i32 @lchown(i8* nocapture noundef readonly, i32 noundef, i32 noundef) [[NOFREE_NOUNWIND]]
591declare i32 @lchown(i8*, i32, i32)
592
593; CHECK: declare double @ldexp(double, i32 signext) [[NOFREE_WILLRETURN:#[0-9]+]]
594declare double @ldexp(double, i32)
595
596; CHECK: declare float @ldexpf(float, i32 signext) [[NOFREE_WILLRETURN]]
597declare float @ldexpf(float, i32)
598
599; CHECK: declare x86_fp80 @ldexpl(x86_fp80, i32 signext) [[NOFREE_WILLRETURN]]
600declare x86_fp80 @ldexpl(x86_fp80, i32)
601
602; CHECK: declare i64 @llabs(i64) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
603declare i64 @llabs(i64)
604
605; CHECK: declare double @log(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
606declare double @log(double)
607
608; CHECK: declare double @log10(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
609declare double @log10(double)
610
611; CHECK: declare float @log10f(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
612declare float @log10f(float)
613
614; CHECK: declare x86_fp80 @log10l(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
615declare x86_fp80 @log10l(x86_fp80)
616
617; CHECK: declare double @log1p(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
618declare double @log1p(double)
619
620; CHECK: declare float @log1pf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
621declare float @log1pf(float)
622
623; CHECK: declare x86_fp80 @log1pl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
624declare x86_fp80 @log1pl(x86_fp80)
625
626; CHECK: declare double @log2(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
627declare double @log2(double)
628
629; CHECK: declare float @log2f(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
630declare float @log2f(float)
631
632; CHECK: declare x86_fp80 @log2l(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
633declare x86_fp80 @log2l(x86_fp80)
634
635; CHECK: declare double @logb(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
636declare double @logb(double)
637
638; CHECK: declare float @logbf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
639declare float @logbf(float)
640
641; CHECK: declare x86_fp80 @logbl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
642declare x86_fp80 @logbl(x86_fp80)
643
644; CHECK: declare float @logf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
645declare float @logf(float)
646
647; CHECK: declare x86_fp80 @logl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
648declare x86_fp80 @logl(x86_fp80)
649
650; CHECK: declare noundef i32 @lstat(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
651declare i32 @lstat(i8*, %opaque*)
652
653; CHECK-LINUX: declare noundef i32 @lstat64(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
654declare i32 @lstat64(i8*, %opaque*)
655
656; CHECK: declare noalias noundef i8* @malloc(i64 noundef) [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
657declare i8* @malloc(i64)
658
659; CHECK-LINUX: declare noalias noundef i8* @memalign(i64, i64) [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
660declare i8* @memalign(i64, i64)
661
662; CHECK: declare i8* @memccpy(i8* noalias writeonly, i8* noalias nocapture readonly, i32, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
663declare i8* @memccpy(i8*, i8*, i32, i64)
664
665; CHECK-LINUX:   declare i8* @memchr(i8*, i32, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
666; CHECK-DARWIN:  declare i8* @memchr(i8*, i32, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY:#[0-9]+]]
667; CHECK-UNKNOWN: declare i8* @memchr(i8*, i32, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY:#[0-9]+]]
668declare i8* @memchr(i8*, i32, i64)
669
670; CHECK: declare i32 @memcmp(i8* nocapture, i8* nocapture, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
671declare i32 @memcmp(i8*, i8*, i64)
672
673; CHECK: declare i8* @memcpy(i8* noalias returned writeonly, i8* noalias nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
674declare i8* @memcpy(i8*, i8*, i64)
675
676; CHECK: declare i8* @__memcpy_chk(i8* noalias writeonly, i8* noalias nocapture readonly, i64, i64) [[ARGMEMONLY_NOFREE_NOUNWIND:#[0-9]+]]
677declare i8* @__memcpy_chk(i8*, i8*, i64, i64)
678
679; CHECK: declare i8* @mempcpy(i8* noalias writeonly, i8* noalias nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
680declare i8* @mempcpy(i8*, i8*, i64)
681
682; CHECK: declare i8* @memmove(i8* returned writeonly, i8* nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
683declare i8* @memmove(i8*, i8*, i64)
684
685; CHECK: declare i8* @memset(i8* writeonly, i32, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
686declare i8* @memset(i8*, i32, i64)
687
688; CHECK: declare i8* @__memset_chk(i8* writeonly, i32, i64, i64) [[ARGMEMONLY_NOFREE_NOUNWIND]]
689declare i8* @__memset_chk(i8*, i32, i64, i64)
690
691; CHECK: declare noundef i32 @mkdir(i8* nocapture noundef readonly, i16 noundef zeroext) [[NOFREE_NOUNWIND]]
692declare i32 @mkdir(i8*, i16 zeroext)
693
694; CHECK: declare noundef i64 @mktime(%opaque* nocapture noundef) [[NOFREE_NOUNWIND_WILLRETURN]]
695declare i64 @mktime(%opaque*)
696
697; CHECK: declare double @modf(double, double* nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
698declare double @modf(double, double*)
699
700; CHECK: declare float @modff(float, float* nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
701declare float @modff(float, float*)
702
703; CHECK: declare x86_fp80 @modfl(x86_fp80, x86_fp80* nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
704declare x86_fp80 @modfl(x86_fp80, x86_fp80*)
705
706; CHECK: declare double @nearbyint(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
707declare double @nearbyint(double)
708
709; CHECK: declare float @nearbyintf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
710declare float @nearbyintf(float)
711
712; CHECK: declare x86_fp80 @nearbyintl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
713declare x86_fp80 @nearbyintl(x86_fp80)
714
715; CHECK-LINUX: declare noundef i32 @open(i8* nocapture noundef readonly, i32 noundef, ...) [[NOFREE]]
716; CHECK-OPEN: declare noundef i32 @open(i8* nocapture noundef readonly, i32 noundef, ...) [[NOFREE:#[0-9]+]]
717declare i32 @open(i8*, i32, ...)
718
719; CHECK-LINUX: declare noundef i32 @open64(i8* nocapture noundef readonly, i32 noundef, ...) [[NOFREE]]
720declare i32 @open64(i8*, i32, ...)
721
722; CHECK: declare noalias noundef %opaque* @opendir(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
723declare %opaque* @opendir(i8*)
724
725; CHECK: declare noundef i32 @pclose(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
726declare i32 @pclose(%opaque*)
727
728; CHECK: declare void @perror(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
729declare void @perror(i8*)
730
731; CHECK: declare noalias noundef %opaque* @popen(i8* nocapture noundef readonly, i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
732declare %opaque* @popen(i8*, i8*)
733
734; CHECK: declare i32 @posix_memalign(i8**, i64, i64) [[NOFREE]]
735declare i32 @posix_memalign(i8**, i64, i64)
736
737; CHECK: declare double @pow(double, double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
738declare double @pow(double, double)
739
740; CHECK: declare float @powf(float, float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
741declare float @powf(float, float)
742
743; CHECK: declare x86_fp80 @powl(x86_fp80, x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
744declare x86_fp80 @powl(x86_fp80, x86_fp80)
745
746; CHECK: declare noundef i64 @pread(i32 noundef, i8* nocapture noundef, i64 noundef, i64 noundef) [[NOFREE]]
747declare i64 @pread(i32, i8*, i64, i64)
748
749; CHECK: declare noundef i32 @printf(i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
750declare i32 @printf(i8*, ...)
751
752; CHECK: declare noundef i32 @putc(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
753declare i32 @putc(i32, %opaque*)
754
755; CHECK: declare noundef i32 @putchar(i32 noundef) [[NOFREE_NOUNWIND]]
756declare i32 @putchar(i32)
757
758; CHECK-KNOWN: declare noundef i32 @putchar_unlocked(i32 noundef) [[NOFREE_NOUNWIND]]
759; CHECK-UNKNOWN: declare i32 @putchar_unlocked(i32){{$}}
760declare i32 @putchar_unlocked(i32)
761
762; CHECK: declare noundef i32 @puts(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
763declare i32 @puts(i8*)
764
765; CHECK: declare noundef i64 @pwrite(i32 noundef, i8* nocapture noundef readonly, i64 noundef, i64 noundef) [[NOFREE]]
766declare i64 @pwrite(i32, i8*, i64, i64)
767
768; CHECK: declare void @qsort(i8* noundef, i64 noundef, i64 noundef, i32 (i8*, i8*)* nocapture noundef) [[NOFREE]]
769declare void @qsort(i8*, i64, i64, i32 (i8*, i8*)*)
770
771; CHECK: declare noundef i64 @read(i32 noundef, i8* nocapture noundef, i64 noundef) [[NOFREE]]
772declare i64 @read(i32, i8*, i64)
773
774; CHECK: declare noundef i64 @readlink(i8* nocapture noundef readonly, i8* nocapture noundef, i64 noundef) [[NOFREE_NOUNWIND]]
775declare i64 @readlink(i8*, i8*, i64)
776
777; CHECK: declare noalias noundef i8* @realloc(i8* nocapture, i64 noundef) [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND_WILLRETURN]]
778declare i8* @realloc(i8*, i64)
779
780; CHECK: declare noalias noundef i8* @reallocf(i8* nocapture, i64 noundef) [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND_WILLRETURN]]
781declare i8* @reallocf(i8*, i64)
782
783; CHECK: declare noundef i8* @realpath(i8* nocapture noundef readonly, i8* noundef) [[NOFREE_NOUNWIND]]
784declare i8* @realpath(i8*, i8*)
785
786; CHECK: declare noundef i32 @remove(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
787declare i32 @remove(i8*)
788
789; CHECK: declare noundef i32 @rename(i8* nocapture noundef readonly, i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
790declare i32 @rename(i8*, i8*)
791
792; CHECK: declare void @rewind(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
793declare void @rewind(%opaque*)
794
795; CHECK: declare double @rint(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
796declare double @rint(double)
797
798; CHECK: declare float @rintf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
799declare float @rintf(float)
800
801; CHECK: declare x86_fp80 @rintl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
802declare x86_fp80 @rintl(x86_fp80)
803
804; CHECK: declare noundef i32 @rmdir(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
805declare i32 @rmdir(i8*)
806
807; CHECK: declare double @round(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
808declare double @round(double)
809
810; CHECK: declare float @roundf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
811declare float @roundf(float)
812
813; CHECK: declare x86_fp80 @roundl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
814declare x86_fp80 @roundl(x86_fp80)
815
816; CHECK: declare noundef i32 @scanf(i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
817declare i32 @scanf(i8*, ...)
818
819; CHECK: declare void @setbuf(%opaque* nocapture noundef, i8* noundef) [[NOFREE_NOUNWIND]]
820declare void @setbuf(%opaque*, i8*)
821
822; CHECK: declare noundef i32 @setitimer(i32 noundef, %opaque* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND_WILLRETURN]]
823declare i32 @setitimer(i32, %opaque*, %opaque*)
824
825; CHECK: declare noundef i32 @setvbuf(%opaque* nocapture noundef, i8* noundef, i32 noundef, i64 noundef) [[NOFREE_NOUNWIND]]
826declare i32 @setvbuf(%opaque*, i8*, i32, i64)
827
828; CHECK: declare double @sin(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
829declare double @sin(double)
830
831; CHECK: declare float @sinf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
832declare float @sinf(float)
833
834; CHECK: declare double @sinh(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
835declare double @sinh(double)
836
837; CHECK: declare float @sinhf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
838declare float @sinhf(float)
839
840; CHECK: declare x86_fp80 @sinhl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
841declare x86_fp80 @sinhl(x86_fp80)
842
843; CHECK: declare x86_fp80 @sinl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
844declare x86_fp80 @sinl(x86_fp80)
845
846; CHECK: declare noundef i32 @snprintf(i8* noalias nocapture noundef writeonly, i64 noundef, i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
847declare i32 @snprintf(i8*, i64, i8*, ...)
848
849; CHECK: declare noundef i32 @sprintf(i8* noalias nocapture noundef writeonly, i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
850declare i32 @sprintf(i8*, i8*, ...)
851
852; CHECK: declare double @sqrt(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
853declare double @sqrt(double)
854
855; CHECK: declare float @sqrtf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
856declare float @sqrtf(float)
857
858; CHECK: declare x86_fp80 @sqrtl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
859declare x86_fp80 @sqrtl(x86_fp80)
860
861; CHECK: declare noundef i32 @sscanf(i8* nocapture noundef readonly, i8* nocapture noundef readonly, ...) [[NOFREE_NOUNWIND]]
862declare i32 @sscanf(i8*, i8*, ...)
863
864; CHECK: declare noundef i32 @stat(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
865declare i32 @stat(i8*, %opaque*)
866
867; CHECK-LINUX: declare noundef i32 @stat64(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
868declare i32 @stat64(i8*, %opaque*)
869
870; CHECK: declare noundef i32 @statvfs(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
871declare i32 @statvfs(i8*, %opaque*)
872
873; CHECK-LINUX: declare noundef i32 @statvfs64(i8* nocapture noundef readonly, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
874declare i32 @statvfs64(i8*, %opaque*)
875
876; CHECK: declare i8* @stpcpy(i8* noalias writeonly, i8* noalias nocapture readonly) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
877declare i8* @stpcpy(i8*, i8*)
878
879; CHECK: declare i8* @stpncpy(i8* noalias writeonly, i8* noalias nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
880declare i8* @stpncpy(i8*, i8*, i64)
881
882; CHECK: declare i32 @strcasecmp(i8* nocapture, i8* nocapture) [[NOFREE_NOUNWIND_READONLY_WILLRETURN:#[0-9]+]]
883declare i32 @strcasecmp(i8*, i8*)
884
885; CHECK: declare i8* @strcat(i8* noalias returned, i8* noalias nocapture readonly) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
886declare i8* @strcat(i8*, i8*)
887
888; CHECK: declare i8* @strchr(i8*, i32) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
889declare i8* @strchr(i8*, i32)
890
891; CHECK: declare i32 @strcmp(i8* nocapture, i8* nocapture) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
892declare i32 @strcmp(i8*, i8*)
893
894; CHECK: declare i32 @strcoll(i8* nocapture, i8* nocapture) [[NOFREE_NOUNWIND_READONLY_WILLRETURN]]
895declare i32 @strcoll(i8*, i8*)
896
897; CHECK: declare i8* @strcpy(i8* noalias returned writeonly, i8* noalias nocapture readonly) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
898declare i8* @strcpy(i8*, i8*)
899
900; CHECK: declare i64 @strcspn(i8* nocapture, i8* nocapture) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
901declare i64 @strcspn(i8*, i8*)
902
903; CHECK: declare noalias i8* @strdup(i8* nocapture readonly) [[INACCESSIBLEMEMORARGONLY_NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
904declare i8* @strdup(i8*)
905
906; CHECK: declare i64 @strlen(i8* nocapture) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
907declare i64 @strlen(i8*)
908
909; CHECK: declare i32 @strncasecmp(i8* nocapture, i8* nocapture, i64) [[NOFREE_NOUNWIND_READONLY_WILLRETURN]]
910declare i32 @strncasecmp(i8*, i8*, i64)
911
912; CHECK: declare i8* @strncat(i8* noalias returned, i8* noalias nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
913declare i8* @strncat(i8*, i8*, i64)
914
915; CHECK: declare i32 @strncmp(i8* nocapture, i8* nocapture, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
916declare i32 @strncmp(i8*, i8*, i64)
917
918; CHECK: declare i8* @strncpy(i8* noalias returned writeonly, i8* noalias nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
919declare i8* @strncpy(i8*, i8*, i64)
920
921; CHECK: declare noalias i8* @strndup(i8* nocapture readonly, i64 noundef) [[INACCESSIBLEMEMORARGONLY_NOFREE_NOUNWIND_WILLRETURN]]
922declare i8* @strndup(i8*, i64)
923
924; CHECK: declare i64 @strnlen(i8* nocapture, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY_WILLRETURN:#[0-9]+]]
925declare i64 @strnlen(i8*, i64)
926
927; CHECK: declare i8* @strpbrk(i8*, i8* nocapture) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY_WILLRETURN]]
928declare i8* @strpbrk(i8*, i8*)
929
930; CHECK: declare i8* @strrchr(i8*, i32) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
931declare i8* @strrchr(i8*, i32)
932
933; CHECK: declare i64 @strspn(i8* nocapture, i8* nocapture) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY]]
934declare i64 @strspn(i8*, i8*)
935
936; CHECK: declare i8* @strstr(i8*, i8* nocapture) [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY_WILLRETURN]]
937declare i8* @strstr(i8*, i8*)
938
939; CHECK: declare double @strtod(i8* readonly, i8** nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
940declare double @strtod(i8*, i8**)
941
942; CHECK: declare float @strtof(i8* readonly, i8** nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
943declare float @strtof(i8*, i8**)
944
945; CHECK: declare i8* @strtok(i8*, i8* nocapture readonly) [[NOFREE_NOUNWIND_WILLRETURN]]
946declare i8* @strtok(i8*, i8*)
947
948; CHECK: declare i8* @strtok_r(i8*, i8* nocapture readonly, i8**) [[NOFREE_NOUNWIND_WILLRETURN]]
949declare i8* @strtok_r(i8*, i8*, i8**)
950
951; CHECK: declare i64 @strtol(i8* readonly, i8** nocapture, i32) [[NOFREE_NOUNWIND_WILLRETURN]]
952declare i64 @strtol(i8*, i8**, i32)
953
954; CHECK: declare x86_fp80 @strtold(i8* readonly, i8** nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
955declare x86_fp80 @strtold(i8*, i8**)
956
957; CHECK: declare i64 @strtoll(i8* readonly, i8** nocapture, i32) [[NOFREE_NOUNWIND_WILLRETURN]]
958declare i64 @strtoll(i8*, i8**, i32)
959
960; CHECK: declare i64 @strtoul(i8* readonly, i8** nocapture, i32) [[NOFREE_NOUNWIND_WILLRETURN]]
961declare i64 @strtoul(i8*, i8**, i32)
962
963; CHECK: declare i64 @strtoull(i8* readonly, i8** nocapture, i32) [[NOFREE_NOUNWIND_WILLRETURN]]
964declare i64 @strtoull(i8*, i8**, i32)
965
966; CHECK: declare i64 @strxfrm(i8* nocapture, i8* nocapture readonly, i64) [[NOFREE_NOUNWIND_WILLRETURN]]
967declare i64 @strxfrm(i8*, i8*, i64)
968
969; CHECK: declare noundef i32 @system(i8* nocapture noundef readonly) [[NOFREE]]
970declare i32 @system(i8*)
971
972; CHECK: declare double @tan(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
973declare double @tan(double)
974
975; CHECK: declare float @tanf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
976declare float @tanf(float)
977
978; CHECK: declare double @tanh(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
979declare double @tanh(double)
980
981; CHECK: declare float @tanhf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
982declare float @tanhf(float)
983
984; CHECK: declare x86_fp80 @tanhl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
985declare x86_fp80 @tanhl(x86_fp80)
986
987; CHECK: declare x86_fp80 @tanl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
988declare x86_fp80 @tanl(x86_fp80)
989
990; CHECK: declare noundef i64 @times(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
991declare i64 @times(%opaque*)
992
993; CHECK: declare noalias noundef %opaque* @tmpfile() [[NOFREE_NOUNWIND]]
994declare %opaque* @tmpfile()
995
996; CHECK-LINUX: declare noalias noundef %opaque* @tmpfile64() [[NOFREE_NOUNWIND]]
997declare %opaque* @tmpfile64()
998
999; CHECK: declare i32 @toascii(i32) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
1000declare i32 @toascii(i32)
1001
1002; CHECK: declare double @trunc(double) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
1003declare double @trunc(double)
1004
1005; CHECK: declare float @truncf(float) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
1006declare float @truncf(float)
1007
1008; CHECK: declare x86_fp80 @truncl(x86_fp80) [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]]
1009declare x86_fp80 @truncl(x86_fp80)
1010
1011; CHECK: declare noundef i32 @uname(%opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
1012declare i32 @uname(%opaque*)
1013
1014; CHECK: declare noundef i32 @ungetc(i32 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
1015declare i32 @ungetc(i32, %opaque*)
1016
1017; CHECK: declare noundef i32 @unlink(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
1018declare i32 @unlink(i8*)
1019
1020; CHECK: declare noundef i32 @unsetenv(i8* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
1021declare i32 @unsetenv(i8*)
1022
1023; CHECK: declare noundef i32 @utime(i8* nocapture noundef readonly, %opaque* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
1024declare i32 @utime(i8*, %opaque*)
1025
1026; CHECK: declare noundef i32 @utimes(i8* nocapture noundef readonly, %opaque* nocapture noundef readonly) [[NOFREE_NOUNWIND]]
1027declare i32 @utimes(i8*, %opaque*)
1028
1029; CHECK: declare noalias noundef i8* @valloc(i64 noundef) [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
1030declare i8* @valloc(i64)
1031
1032; CHECK: declare noundef i32 @vfprintf(%opaque* nocapture noundef, i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1033declare i32 @vfprintf(%opaque*, i8*, %opaque*)
1034
1035; CHECK: declare noundef i32 @vfscanf(%opaque* nocapture noundef, i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1036declare i32 @vfscanf(%opaque*, i8*, %opaque*)
1037
1038; CHECK: declare noundef i32 @vprintf(i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1039declare i32 @vprintf(i8*, %opaque*)
1040
1041; CHECK: declare noundef i32 @vscanf(i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1042declare i32 @vscanf(i8*, %opaque*)
1043
1044; CHECK: declare noundef i32 @vsnprintf(i8* nocapture noundef, i64 noundef, i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1045declare i32 @vsnprintf(i8*, i64, i8*, %opaque*)
1046
1047; CHECK: declare noundef i32 @vsprintf(i8* nocapture noundef, i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1048declare i32 @vsprintf(i8*, i8*, %opaque*)
1049
1050; CHECK: declare noundef i32 @vsscanf(i8* nocapture noundef readonly, i8* nocapture noundef readonly, %opaque* noundef) [[NOFREE_NOUNWIND]]
1051declare i32 @vsscanf(i8*, i8*, %opaque*)
1052
1053; CHECK: declare noundef i64 @write(i32 noundef, i8* nocapture noundef readonly, i64 noundef) [[NOFREE]]
1054declare i64 @write(i32, i8*, i64)
1055
1056
1057; memset_pattern{4,8,16} aren't available everywhere.
1058; CHECK-DARWIN: declare void @memset_pattern4(i8* nocapture writeonly, i8* nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
1059declare void @memset_pattern4(i8*, i8*, i64)
1060; CHECK-DARWIN: declare void @memset_pattern8(i8* nocapture writeonly, i8* nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
1061declare void @memset_pattern8(i8*, i8*, i64)
1062; CHECK-DARWIN: declare void @memset_pattern16(i8* nocapture writeonly, i8* nocapture readonly, i64) [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]]
1063declare void @memset_pattern16(i8*, i8*, i64)
1064
1065
1066; CHECK-DAG: attributes [[NOFREE_NOUNWIND_WILLRETURN]] = { mustprogress nofree nounwind willreturn }
1067; CHECK-DAG: attributes [[NOFREE_NOUNWIND_WILLRETURN_WRITEONLY]] = { mustprogress nofree nounwind willreturn writeonly }
1068; CHECK-DAG: attributes [[NOFREE_NOUNWIND]] = { nofree nounwind }
1069; CHECK-DAG: attributes [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN]] = { inaccessiblememonly mustprogress nofree nounwind willreturn }
1070; CHECK-DAG: attributes [[NOFREE_NOUNWIND_READONLY_WILLRETURN]] = { mustprogress nofree nounwind readonly willreturn }
1071; CHECK-DAG: attributes [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]] = { argmemonly mustprogress nofree nounwind willreturn }
1072; CHECK-DAG: attributes [[NOFREE_NOUNWIND_READONLY]] = { nofree nounwind readonly }
1073; CHECK-DAG: attributes [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND_WILLRETURN]] = { inaccessiblemem_or_argmemonly mustprogress nounwind willreturn }
1074; CHECK-DAG: attributes [[NOFREE_WILLRETURN]] = { mustprogress nofree willreturn }
1075; CHECK-DAG: attributes [[ARGMEMONLY_NOFREE_NOUNWIND_READONLY_WILLRETURN]] = { argmemonly mustprogress nofree nounwind readonly willreturn }
1076; CHECK-DAG: attributes [[NOFREE]] = { nofree }
1077; CHECK-DAG: attributes [[INACCESSIBLEMEMORARGONLY_NOFREE_NOUNWIND_WILLRETURN]]  = { inaccessiblemem_or_argmemonly mustprogress nofree nounwind willreturn }
1078; CHECK-DAG: attributes [[ARGMEMONLY_NOFREE_NOUNWIND]] = { argmemonly nofree nounwind }
1079
1080; CHECK-NVPTX-DAG: attributes [[NOFREE_NOUNWIND_READNONE]] = { nofree nosync nounwind readnone }
1081