[ThinLTO] Add code comment. NFC
[llvm-complete.git] / test / Verifier / frameescape.ll
blob0850b9495d9bbb9552f65a34b7a39385403140e6
1 ; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
3 declare void @llvm.localescape(...)
4 declare i8* @llvm.localrecover(i8*, i8*, i32)
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
12 ; CHECK: multiple calls to llvm.localescape in one function
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
22 ; CHECK: llvm.localescape used outside of entry block
24 define internal void @h() {
25   call i8* @llvm.localrecover(i8* null, i8* null, i32 0)
26   ret void
28 ; CHECK: llvm.localrecover first argument must be function defined in this module
30 @global = constant i8 0
32 declare void @declaration()
34 define internal void @i() {
35   call i8* @llvm.localrecover(i8* @global, i8* null, i32 0)
36   ret void
38 ; CHECK: llvm.localrecover first argument must be function defined in this module
40 define internal void @j() {
41   call i8* @llvm.localrecover(i8* bitcast(void()* @declaration to i8*), i8* null, i32 0)
42   ret void
44 ; CHECK: llvm.localrecover first argument must be function defined in this module
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
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)
55 define internal void @l(i8* %b) {
56   %a = alloca i8
57   call void (...) @llvm.localescape(i8* %a, i8* %b)
58   ret void
60 ; CHECK: llvm.localescape only accepts static allocas
62 define internal void @m() {
63   %a = alloca i8
64   call void (...) @llvm.localescape(i8* %a)
65   ret void
68 define internal void @n(i8* %fp) {
69   call i8* @llvm.localrecover(i8* bitcast(void ()* @m to i8*), i8* %fp, i32 1)
70   ret void
72 ; CHECK: all indices passed to llvm.localrecover must be less than the number of arguments passed to llvm.localescape in the parent function