summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-02-14 22:41:01 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-02-14 22:41:01 +0000
commit294483f1c04823e5d9efc2f6bc37bd5b9e4b5843 (patch)
treede80157e709b15f037632dc111a8b3c05a9fa265
parent8b982cb8a90d06cdc8f12246569d3cdcc00a5df8 (diff)
downloadbcm5719-llvm-294483f1c04823e5d9efc2f6bc37bd5b9e4b5843.tar.gz
bcm5719-llvm-294483f1c04823e5d9efc2f6bc37bd5b9e4b5843.zip
Replace gcroot verifier tests
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. llvm-svn: 354070
-rw-r--r--llvm/test/Verifier/gcroot-alloca.ll14
-rw-r--r--llvm/test/Verifier/gcroot-meta.ll16
-rw-r--r--llvm/test/Verifier/gcroot-ptrptr.ll14
-rw-r--r--llvm/test/Verifier/gcroot.ll52
4 files changed, 52 insertions, 44 deletions
diff --git a/llvm/test/Verifier/gcroot-alloca.ll b/llvm/test/Verifier/gcroot-alloca.ll
deleted file mode 100644
index 775bde78250..00000000000
--- a/llvm/test/Verifier/gcroot-alloca.ll
+++ /dev/null
@@ -1,14 +0,0 @@
-; RUN: not llvm-as < %s > /dev/null 2>&1
-; PR1633
-
-%meta = type { i8* }
-%obj = type { %meta* }
-
-declare void @llvm.gcroot(%obj**, %meta*)
-
-define void @f() {
-entry:
- call void @llvm.gcroot(%obj** null, %meta* null)
-
- ret void
-}
diff --git a/llvm/test/Verifier/gcroot-meta.ll b/llvm/test/Verifier/gcroot-meta.ll
deleted file mode 100644
index 26f7b515629..00000000000
--- a/llvm/test/Verifier/gcroot-meta.ll
+++ /dev/null
@@ -1,16 +0,0 @@
-; RUN: not llvm-as < %s > /dev/null 2>&1
-; PR1633
-
-%meta = type { i8* }
-%obj = type { %meta* }
-
-declare void @llvm.gcroot(%obj**, %meta*)
-
-define void @f() {
-entry:
- %local.obj = alloca %obj*
- %local.meta = alloca %meta
- call void @llvm.gcroot(%obj** %local.obj, %meta* %local.meta)
-
- ret void
-}
diff --git a/llvm/test/Verifier/gcroot-ptrptr.ll b/llvm/test/Verifier/gcroot-ptrptr.ll
deleted file mode 100644
index 8d7557d75a4..00000000000
--- a/llvm/test/Verifier/gcroot-ptrptr.ll
+++ /dev/null
@@ -1,14 +0,0 @@
-; RUN: not llvm-as < %s > /dev/null 2>&1
-; PR1633
-
-%meta = type { i8* }
-%obj = type { %meta* }
-
-declare void @llvm.gcroot(%obj*, %meta*)
-
-define void @f() {
-entry:
- %local.obj = alloca %obj
- call void @llvm.gcroot(%obj* %local.obj, %meta* null)
- ret void
-}
diff --git a/llvm/test/Verifier/gcroot.ll b/llvm/test/Verifier/gcroot.ll
new file mode 100644
index 00000000000..75e51d7ec5b
--- /dev/null
+++ b/llvm/test/Verifier/gcroot.ll
@@ -0,0 +1,52 @@
+; 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
+}
OpenPOWER on IntegriCloud