1 ; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s 2 3 declare void @llvm.localescape(...) 4 declare i8* @llvm.localrecover(i8*, i8*, i32) 5 6 define internal void @f() { 7 %a = alloca i8 8 call void (...) @llvm.localescape(i8* %a) 9 call void (...) @llvm.localescape(i8* %a) 10 ret void 11 } 12 ; CHECK: multiple calls to llvm.localescape in one function 13 14 define internal void @g() { 15 entry: 16 %a = alloca i8 17 br label %not_entry 18 not_entry: 19 call void (...) @llvm.localescape(i8* %a) 20 ret void 21 } 22 ; CHECK: llvm.localescape used outside of entry block 23 24 define internal void @h() { 25 call i8* @llvm.localrecover(i8* null, i8* null, i32 0) 26 ret void 27 } 28 ; CHECK: llvm.localrecover first argument must be function defined in this module 29 30 @global = constant i8 0 31 32 declare void @declaration() 33 34 define internal void @i() { 35 call i8* @llvm.localrecover(i8* @global, i8* null, i32 0) 36 ret void 37 } 38 ; CHECK: llvm.localrecover first argument must be function defined in this module 39 40 define internal void @j() { 41 call i8* @llvm.localrecover(i8* bitcast(void()* @declaration to i8*), i8* null, i32 0) 42 ret void 43 } 44 ; CHECK: llvm.localrecover first argument must be function defined in this module 45 46 define internal void @k(i32 %n) { 47 call i8* @llvm.localrecover(i8* bitcast(void()* @f to i8*), i8* null, i32 %n) 48 ret void 49 } 50 ; CHECK: idx argument of llvm.localrecover must be a constant int 51 52 define internal void @l(i8* %b) { 53 %a = alloca i8 54 call void (...) @llvm.localescape(i8* %a, i8* %b) 55 ret void 56 } 57 ; CHECK: llvm.localescape only accepts static allocas 58 59 define internal void @m() { 60 %a = alloca i8 61 call void (...) @llvm.localescape(i8* %a) 62 ret void 63 } 64 65 define internal void @n(i8* %fp) { 66 call i8* @llvm.localrecover(i8* bitcast(void ()* @m to i8*), i8* %fp, i32 1) 67 ret void 68 } 69 ; CHECK: all indices passed to llvm.localrecover must be less than the number of arguments passed ot llvm.localescape in the parent function 70