1 ; RUN: not llvm-as < %s -o /dev/null |& FileCheck %s
3 declare i32 @size() readonly
5 declare i32 @size1(i32) readnone
6 declare i32 @size1i8(i8) readnone
7 declare i32* @sizeptr() readnone
9 define void @f1(i8** %x, i32* %y) {
11 %0 = load i8** %x, !alloc !0
12 %1 = load i8** %x, !alloc !1
13 %2 = load i8** %x, !alloc !2
14 %3 = load i8** %x, !alloc !3
15 %4 = load i8** %x, !alloc !4
16 %5 = load i8** %x, !alloc !5
17 %6 = load i8** %x, !alloc !6
18 %7 = load i8** %x, !alloc !7
19 %8 = load i8** %x, !alloc !8
20 %9 = load i32* %y, !alloc !9
21 %10 = load i8** %x, !alloc !10
22 %11 = load i8** %x, !alloc !11
25 ; CHECK: alloc takes at least one operand
27 ; CHECK: first parameter of alloc must be a function
28 !1 = metadata !{i32 0}
29 ; CHECK: second parameter of alloc must be either a function or null
30 !2 = metadata !{i32 ()* @size, i32 0}
31 ; CHECK: size function number of parameters mismatch
32 !3 = metadata !{i32 ()* @size, null, i32 0}
33 ; CHECK: offset function number of parameters mismatch
34 !4 = metadata !{i32 (i32)* @size1, i32 ()* @size, i32 1}
35 ; CHECK: size function must be readonly/readnone
36 !5 = metadata !{i32 ()* @sizeR, i32 ()* @size}
37 ; CHECK: offset function must be readonly/readnone
38 !6 = metadata !{i32 ()* @size, i32 ()* @sizeR}
39 ; CHECK: size function parameter type mismatch
40 !7 = metadata !{i32 (i32)* @size1, i32 (i8)* @size1i8, i8 5}
41 ; CHECK: offset function parameter type mismatch
42 !8 = metadata !{i32 (i8)* @size1i8, i32 (i32)* @size1, i8 5}
43 ; CHECK: alloc requires a pointer result
44 !9 = metadata !{i32 ()* @size, null}
45 ; CHECK: size function must return an integer
46 !10 = metadata !{i32* ()* @sizeptr, null}
47 ; CHECK: offset function must return an integer
48 !11 = metadata !{i32 ()* @size, i32* ()* @sizeptr}