summaryrefslogtreecommitdiff
path: root/test/Other
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-04-30 19:05:00 +0000
committerDan Gohman <gohman@apple.com>2010-04-30 19:05:00 +0000
commit5b61b3818a3aadb928485571d69e5bccc52e1d5b (patch)
tree15c28546381aa9892a3b4ea5219b62a9608aead3 /test/Other
parent5cc6f9ba4777a460d7036edbbb3e8f01fb0a3d32 (diff)
downloadllvm-5b61b3818a3aadb928485571d69e5bccc52e1d5b.tar.gz
llvm-5b61b3818a3aadb928485571d69e5bccc52e1d5b.tar.bz2
llvm-5b61b3818a3aadb928485571d69e5bccc52e1d5b.tar.xz
Add lint checks for invalid uses of memory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102733 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Other')
-rw-r--r--test/Other/lint.ll18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/Other/lint.ll b/test/Other/lint.ll
index 8658495c97..d0db5e46c6 100644
--- a/test/Other/lint.ll
+++ b/test/Other/lint.ll
@@ -3,6 +3,8 @@ target datalayout = "e-p:64:64:64"
declare fastcc void @bar()
+@CG = constant i32 7
+
define i32 @foo() noreturn {
; CHECK: Caller and callee calling convention differ
call void @bar()
@@ -39,6 +41,16 @@ define i32 @foo() noreturn {
%xx = xor i32 undef, undef
; CHECK: sub(undef, undef)
%xs = sub i32 undef, undef
+
+; CHECK: Write to read-only memory
+ store i32 8, i32* @CG
+; CHECK: Write to text section
+ store i32 8, i32* bitcast (i32()* @foo to i32*)
+; CHECK: Load from block address
+ %lb = load i32* bitcast (i8* blockaddress(@foo, %next) to i32*)
+; CHECK: Call to block address
+ call void()* bitcast (i8* blockaddress(@foo, %next) to void()*)()
+
br label %next
next:
@@ -64,3 +76,9 @@ define void @not_vararg(i8* %p) nounwind {
call void @llvm.va_start(i8* %p)
ret void
}
+
+define void @use_indbr() {
+ indirectbr i8* bitcast (i32()* @foo to i8*), [label %block]
+block:
+ unreachable
+}