xref: /llvm-project/llvm/test/Verifier/ifunc.ll (revision b05c71814c3b9f91a2e00af891d67a83790a109c)
1; RUN:  not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
2
3define ptr @resolver() {
4  ret ptr null
5}
6
7@inval_linkage = extern_weak ifunc void (), ptr @resolver
8; CHECK: IFunc should have {{.*}} linkage!
9; CHECK-NEXT: @inval_linkage
10
11@g = external global i32
12@inval_objtype = ifunc void (), ptr @g
13; CHECK: IFunc must have a Function resolver
14
15declare ptr @resolver_decl()
16@inval_resolver_decl = ifunc void (), ptr @resolver_decl
17; CHECK: IFunc resolver must be a definition
18; CHECK-NEXT: @inval_resolver_decl
19
20define available_externally ptr @resolver_linker_decl() {
21  ret ptr null
22}
23@inval_resolver_decl2 = ifunc void (), ptr @resolver_linker_decl
24; CHECK: IFunc resolver must be a definition
25; CHECK-NEXT: @inval_resolver_decl2
26
27@ifunc_nonpointer_return_type = ifunc i32 (), ptr @resolver_returns_nonpointer
28; CHECK: IFunc resolver must return a pointer
29; CHECK-NEXT: ptr @ifunc_nonpointer_return_type
30
31define i32 @resolver_returns_nonpointer() {
32  ret i32 0
33}
34