mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-24 06:30:19 +00:00
90844c4778
After the -asan pass had been split into -asan (function-level) and -asan-module (module-level) some of the tests have silently stopped working, because they didn't instrument the globals anymore. We've decided to have every test using both passes, irrespective of the presence of globals in it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204335 91177308-0d34-0410-b5e6-96231b3b80d8
34 lines
1.1 KiB
LLVM
34 lines
1.1 KiB
LLVM
; Test handling of llvm.lifetime intrinsics in UAR mode.
|
|
; RUN: opt < %s -asan -asan-module -asan-use-after-return -asan-check-lifetime -S | FileCheck %s
|
|
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
|
|
|
declare void @llvm.lifetime.start(i64, i8* nocapture) nounwind
|
|
declare void @llvm.lifetime.end(i64, i8* nocapture) nounwind
|
|
|
|
define i32 @basic_test() sanitize_address {
|
|
; CHECK-LABEL: define i32 @basic_test()
|
|
|
|
entry:
|
|
%retval = alloca i32, align 4
|
|
%c = alloca i8, align 1
|
|
|
|
call void @llvm.lifetime.start(i64 1, i8* %c)
|
|
; Memory is unpoisoned at llvm.lifetime.start
|
|
; CHECK: call void @__asan_unpoison_stack_memory(i64 %{{[^ ]+}}, i64 1)
|
|
|
|
store i32 0, i32* %retval
|
|
store i8 0, i8* %c, align 1
|
|
|
|
call void @llvm.lifetime.end(i64 1, i8* %c)
|
|
; Memory is poisoned at llvm.lifetime.end
|
|
; CHECK: call void @__asan_poison_stack_memory(i64 %{{[^ ]+}}, i64 1)
|
|
|
|
; No need to unpoison memory at function exit in UAR mode.
|
|
; CHECK-NOT: @__asan_unpoison_stack_memory
|
|
; CHECK: ret void
|
|
|
|
ret i32 0
|
|
}
|
|
|