1; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s 2 3declare void @llvm.localescape(...) 4declare i8* @llvm.localrecover(i8*, i8*, i32) 5 6define 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 14define internal void @g() { 15entry: 16 %a = alloca i8 17 br label %not_entry 18not_entry: 19 call void (...) @llvm.localescape(i8* %a) 20 ret void 21} 22; CHECK: llvm.localescape used outside of entry block 23 24define 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 32declare void @declaration() 33 34define 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 40define 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 46define 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 51; CHECK: immarg operand has non-immediate parameter 52; CHECK-NEXT: i32 %n 53; CHECK-NEXT: %1 = call i8* @llvm.localrecover(i8* bitcast (void ()* @f to i8*), i8* null, i32 %n) 54 55define internal void @l(i8* %b) { 56 %a = alloca i8 57 call void (...) @llvm.localescape(i8* %a, i8* %b) 58 ret void 59} 60; CHECK: llvm.localescape only accepts static allocas 61 62define internal void @m() { 63 %a = alloca i8 64 call void (...) @llvm.localescape(i8* %a) 65 ret void 66} 67 68define internal void @n(i8* %fp) { 69 call i8* @llvm.localrecover(i8* bitcast(void ()* @m to i8*), i8* %fp, i32 1) 70 ret void 71} 72; CHECK: all indices passed to llvm.localrecover must be less than the number of arguments passed to llvm.localescape in the parent function 73