summaryrefslogtreecommitdiffstats
path: root/test/Verifier
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-06-01 16:13:10 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-06-01 16:13:10 +0000
commitda6ed23fe1293d1f69528a76477adfc861aef333 (patch)
treef63a8e07ef18ba5650f96525d9295a72261f4f50 /test/Verifier
parentcc0c9e0cf6a583c82e2dc4b604edb8c4e88659b7 (diff)
[IR] Disallow loading and storing unsized types
Summary: It isn't clear what is the operational meaning of loading or storing an unsized types, since it cannot be lowered into something meaningful. Since there does not seem to be any practical need for it either, make such loads and stores illegal IR. Reviewers: majnemer, chandlerc Subscribers: mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D20846 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271402 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Verifier')
-rw-r--r--test/Verifier/unsized-types.ll24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/Verifier/unsized-types.ll b/test/Verifier/unsized-types.ll
new file mode 100644
index 000000000000..64cc36f31741
--- /dev/null
+++ b/test/Verifier/unsized-types.ll
@@ -0,0 +1,24 @@
+; RUN: not opt -verify < %s 2>&1 | FileCheck %s
+
+%X = type opaque
+
+define void @f_0(%X* %ptr) {
+ %t = load %X, %X* %ptr
+ ret void
+; CHECK: loading unsized types is not allowed
+; CHECK-NEXT: %t = load %X, %X* %ptr
+}
+
+define void @f_1(%X %val, %X* %ptr) {
+ store %X %val, %X* %ptr
+ ret void
+; CHECK: storing unsized types is not allowed
+; CHECK-NEXT: store %X %val, %X* %ptr
+}
+
+define void @f_2() {
+ %t = alloca %X
+ ret void
+; CHECK: Cannot allocate unsized type
+; CHECK-NEXT: %t = alloca %X
+}