blob: 6fc52bb66ded4bc515c137784d0d9359a03f4705 [file] [log] [blame]
Yury Gribov55441bb2014-11-21 10:29:50 +00001; Test asan internal compiler flags:
Vitaly Buka5b4f1212016-08-20 17:22:27 +00002; -asan-instrument-dynamic-allocas
Yury Gribov55441bb2014-11-21 10:29:50 +00003
Vitaly Buka5b4f1212016-08-20 17:22:27 +00004; RUN: opt < %s -asan -asan-module -asan-instrument-dynamic-allocas -S | FileCheck %s --check-prefix=CHECK-ALLOCA
Yury Gribov55441bb2014-11-21 10:29:50 +00005target 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"
6target triple = "x86_64-unknown-linux-gnu"
7
8define void @foo(i32 %len) sanitize_address {
9entry:
Alexey Samsonov55fda1b2015-11-05 21:18:41 +000010; CHECK-ALLOCA-LABEL: define void @foo
Yury Gribov98b18592015-05-28 07:51:49 +000011; CHECK-ALLOCA: __asan_alloca_poison
12; CHECK-ALLOCA: __asan_allocas_unpoison
Alexey Samsonov55fda1b2015-11-05 21:18:41 +000013; CHECK-ALLOCA: ret void
Yury Gribov55441bb2014-11-21 10:29:50 +000014 %0 = alloca i32, align 4
15 %1 = alloca i8*
Anna Zaks8ed1d812015-02-27 03:12:36 +000016 store volatile i32 %len, i32* %0, align 4
David Blaikiea79ac142015-02-27 21:17:42 +000017 %2 = load i32, i32* %0, align 4
Yury Gribov55441bb2014-11-21 10:29:50 +000018 %3 = zext i32 %2 to i64
19 %4 = alloca i8, i64 %3, align 32
Anna Zaks8ed1d812015-02-27 03:12:36 +000020 store volatile i8 0, i8* %4
Yury Gribov55441bb2014-11-21 10:29:50 +000021 ret void
22}
23
Alexey Samsonov55fda1b2015-11-05 21:18:41 +000024; Test that dynamic alloca is not used for inalloca variables.
25define void @has_inalloca() uwtable sanitize_address {
26; CHECK-ALLOCA-LABEL: define void @has_inalloca
27; CHECK-ALLOCA-NOT: __asan_alloca_poison
28; CHECK-ALLOCA-NOT: __asan_alloca_unpoison
29; CHECK-ALLOCA: ret void
30entry:
31 %t = alloca inalloca i32
32 store i32 42, i32* %t
33 call void @pass_inalloca(i32* inalloca %t)
34 ret void
35}
36
37declare void @pass_inalloca(i32* inalloca)