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