|  | ; RUN:  not llvm-as %s -o /dev/null 2>&1 | FileCheck %s | 
|  |  | 
|  | define ptr @resolver() { | 
|  | ret ptr null | 
|  | } | 
|  |  | 
|  | @inval_linkage = extern_weak ifunc void (), ptr @resolver | 
|  | ; CHECK: IFunc should have {{.*}} linkage! | 
|  | ; CHECK-NEXT: @inval_linkage | 
|  |  | 
|  | @g = external global i32 | 
|  | @inval_objtype = ifunc void (), ptr @g | 
|  | ; CHECK: IFunc must have a Function resolver | 
|  |  | 
|  | declare ptr @resolver_decl() | 
|  | @inval_resolver_decl = ifunc void (), ptr @resolver_decl | 
|  | ; CHECK: IFunc resolver must be a definition | 
|  | ; CHECK-NEXT: @inval_resolver_decl | 
|  |  | 
|  | define available_externally ptr @resolver_linker_decl() { | 
|  | ret ptr null | 
|  | } | 
|  | @inval_resolver_decl2 = ifunc void (), ptr @resolver_linker_decl | 
|  | ; CHECK: IFunc resolver must be a definition | 
|  | ; CHECK-NEXT: @inval_resolver_decl2 | 
|  |  | 
|  | @ifunc_nonpointer_return_type = ifunc i32 (), ptr @resolver_returns_nonpointer | 
|  | ; CHECK: IFunc resolver must return a pointer | 
|  | ; CHECK-NEXT: ptr @ifunc_nonpointer_return_type | 
|  |  | 
|  | define i32 @resolver_returns_nonpointer() { | 
|  | ret i32 0 | 
|  | } |