mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-30 15:10:30 +00:00
81e2f59c84
These haven't been checking anything useful and have been testing the wrong failure reason for many years. Replace them with something which stresses what is actually implemented in the verifier now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354070 91177308-0d34-0410-b5e6-96231b3b80d8
53 lines
1.6 KiB
LLVM
53 lines
1.6 KiB
LLVM
; RUN: not llvm-as -o /dev/null %s 2>&1 | FileCheck %s
|
|
; PR1633
|
|
|
|
declare void @llvm.gcroot(i8**, i8*)
|
|
|
|
define void @caller_must_use_gc() {
|
|
; CHECK: Enclosing function does not use GC.
|
|
; CHECK-NEXT: call void @llvm.gcroot(i8** %alloca, i8* null)
|
|
%alloca = alloca i8*
|
|
call void @llvm.gcroot(i8** %alloca, i8* null)
|
|
ret void
|
|
}
|
|
|
|
define void @must_be_alloca() gc "test" {
|
|
; CHECK: llvm.gcroot parameter #1 must be an alloca.
|
|
; CHECK-NEXT: call void @llvm.gcroot(i8** null, i8* null)
|
|
call void @llvm.gcroot(i8** null, i8* null)
|
|
ret void
|
|
}
|
|
|
|
define void @non_ptr_alloca_null() gc "test" {
|
|
; CHECK: llvm.gcroot parameter #1 must either be a pointer alloca, or argument #2 must be a non-null constant.
|
|
; CHECK-NEXT: call void @llvm.gcroot(i8** %cast.alloca, i8* null)
|
|
%alloca = alloca i32
|
|
%cast.alloca = bitcast i32* %alloca to i8**
|
|
call void @llvm.gcroot(i8** %cast.alloca, i8* null)
|
|
ret void
|
|
}
|
|
|
|
define void @non_constant_arg1(i8* %arg) gc "test" {
|
|
; CHECK: llvm.gcroot parameter #2 must be a constant.
|
|
; CHECK-NEXT: call void @llvm.gcroot(i8** %alloca, i8* %arg)
|
|
%alloca = alloca i8*
|
|
call void @llvm.gcroot(i8** %alloca, i8* %arg)
|
|
ret void
|
|
}
|
|
|
|
define void @non_ptr_alloca_non_null() gc "test" {
|
|
; CHECK-NOT: llvm.gcroot parameter
|
|
%alloca = alloca i32
|
|
%cast.alloca = bitcast i32* %alloca to i8**
|
|
call void @llvm.gcroot(i8** %cast.alloca, i8* inttoptr (i64 123 to i8*))
|
|
ret void
|
|
}
|
|
|
|
define void @casted_alloca() gc "test" {
|
|
; CHECK-NOT: llvm.gcroot parameter
|
|
%alloca = alloca i32*
|
|
%ptr.cast.alloca = bitcast i32** %alloca to i8**
|
|
call void @llvm.gcroot(i8** %ptr.cast.alloca, i8* null)
|
|
ret void
|
|
}
|