brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.5 KiB · a76566b Raw
394 lines · plain
1; RUN: opt -pass-remarks-output=%t.pass-remarks -mtriple=aarch64-unknown-linux-gnu -passes=hwasan -hwasan-instrument-with-calls -hwasan-use-stack-safety=1 -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=SAFETY,CHECK2; RUN: cat %t.pass-remarks | FileCheck %s --check-prefixes=SAFETY-REMARKS3; RUN: opt -mtriple=aarch64-unknown-linux-gnu -passes=hwasan -hwasan-instrument-with-calls -hwasan-use-stack-safety=0 -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=NOSAFETY,CHECK4; RUN: opt -mtriple=aarch64-unknown-linux-gnu -passes=hwasan -hwasan-instrument-with-calls -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=SAFETY,CHECK5; RUN: opt -mtriple=aarch64-unknown-linux-gnu -passes=hwasan -hwasan-instrument-stack=0 -hwasan-instrument-with-calls -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=NOSTACK,CHECK6 7; RUN: opt -mtriple=riscv64-unknown-linux -passes=hwasan -hwasan-instrument-with-calls -hwasan-use-stack-safety=1 -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=SAFETY,CHECK8; RUN: opt -mtriple=riscv64-unknown-linux -passes=hwasan -hwasan-instrument-with-calls -hwasan-use-stack-safety=0 -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=NOSAFETY,CHECK9; RUN: opt -mtriple=riscv64-unknown-linux -passes=hwasan -hwasan-instrument-with-calls -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=SAFETY,CHECK10; RUN: opt -mtriple=riscv64-unknown-linux -passes=hwasan -hwasan-instrument-stack=0 -hwasan-instrument-with-calls -hwasan-generate-tags-with-calls -S < %s | FileCheck %s --check-prefixes=NOSTACK,CHECK11 12target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"13 14; Check a safe alloca to ensure it does not get a tag.15define i32 @test_simple(ptr %a) sanitize_hwaddress {16entry:17  ; CHECK-LABEL: @test_simple18  ; NOSAFETY: call {{.*}}__hwasan_generate_tag19  ; NOSAFETY: call {{.*}}__hwasan_store20  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag21  ; SAFETY-NOT: call {{.*}}__hwasan_store22  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag23  ; NOSTACK-NOT: call {{.*}}__hwasan_store24  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_simple25  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_simple26  %buf.sroa.0 = alloca i8, align 427  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)28  store volatile i8 0, ptr %buf.sroa.0, align 4, !tbaa !829  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)30  ret i32 031}32 33; Check a safe alloca to ensure it does not get a tag.34define i32 @test_cmpxchg(ptr %a) sanitize_hwaddress {35entry:36  ; CHECK-LABEL: @test_cmpxchg37  ; NOSAFETY: call {{.*}}__hwasan_generate_tag38  ; NOSAFETY: call {{.*}}__hwasan_store39  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag40  ; SAFETY-NOT: call {{.*}}__hwasan_store41  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag42  ; NOSTACK-NOT: call {{.*}}__hwasan_store43  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_cmpxchg44  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_cmpxchg45  %buf.sroa.0 = alloca i8, align 446  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)47  %0 = cmpxchg ptr %buf.sroa.0, i8 1, i8 2 monotonic monotonic, align 448  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)49  ret i32 050}51 52; Check a safe alloca to ensure it does not get a tag.53define i32 @test_atomicrwm(ptr %a) sanitize_hwaddress {54entry:55  ; CHECK-LABEL: @test_atomicrwm56  ; NOSAFETY: call {{.*}}__hwasan_generate_tag57  ; NOSAFETY: call {{.*}}__hwasan_store58  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag59  ; SAFETY-NOT: call {{.*}}__hwasan_store60  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag61  ; NOSTACK-NOT: call {{.*}}__hwasan_store62  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_atomicrwm63  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_atomicrwm64  %buf.sroa.0 = alloca i8, align 465  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)66  %0 = atomicrmw add ptr %buf.sroa.0, i8 1 monotonic, align 467  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)68  ret i32 069}70 71; Check a non-safe alloca to ensure it gets a tag.72define i32 @test_use(ptr %a) sanitize_hwaddress {73entry:74  ; CHECK-LABEL: @test_use75  ; NOSAFETY: call {{.*}}__hwasan_generate_tag76  ; NOSAFETY: call {{.*}}__hwasan_store77  ; SAFETY: call {{.*}}__hwasan_generate_tag78  ; SAFETY-NOT: call {{.*}}__hwasan_store79  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag80  ; NOSTACK-NOT: call {{.*}}__hwasan_store81  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_use82  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_use83  %buf.sroa.0 = alloca i8, align 484  call void @use(ptr nonnull %buf.sroa.0)85  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)86  store volatile i8 0, ptr %buf.sroa.0, align 4, !tbaa !887  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)88  ret i32 089}90 91; Check an alloca with in range GEP to ensure it does not get a tag or check.92define i32 @test_in_range(ptr %a) sanitize_hwaddress {93entry:94  ; CHECK-LABEL: @test_in_range95  ; NOSAFETY: call {{.*}}__hwasan_generate_tag96  ; NOSAFETY: call {{.*}}__hwasan_store97  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag98  ; SAFETY-NOT: call {{.*}}__hwasan_store99  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag100  ; NOSTACK-NOT: call {{.*}}__hwasan_store101  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_in_range102  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_in_range103  %buf.sroa.0 = alloca [10 x i8], align 4104  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)105  store volatile i8 0, ptr %buf.sroa.0, align 4, !tbaa !8106  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)107  ret i32 0108}109 110; Check an alloca with in range GEP to ensure it does not get a tag or check.111define i32 @test_in_range2(ptr %a) sanitize_hwaddress {112entry:113  ; CHECK-LABEL: @test_in_range2114  ; NOSAFETY: call {{.*}}__hwasan_generate_tag115  ; NOSAFETY: call {{.*}}__hwasan_store116  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag117  ; SAFETY-NOT: call {{.*}}__hwasan_store118  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag119  ; NOSTACK-NOT: call {{.*}}__hwasan_store120  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_in_range2121  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_in_range2122  %buf.sroa.0 = alloca [10 x i8], align 4123  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9124  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)125  store volatile i8 0, ptr %ptr, align 4, !tbaa !8126  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)127  ret i32 0128}129 130define i32 @test_in_range3(ptr %a) sanitize_hwaddress {131entry:132  ; CHECK-LABEL: @test_in_range3133  ; NOSAFETY: call {{.*}}__hwasan_generate_tag134  ; NOSAFETY: call {{.*}}__hwasan_memset135  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag136  ; SAFETY-NOT: call {{.*}}__hwasan_memset137  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag138  ; NOSTACK-NOT: call {{.*}}__hwasan_memset139  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_in_range3140  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_in_range3141  %buf.sroa.0 = alloca [10 x i8], align 4142  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9143  call void @llvm.memset.p0.i32(ptr %ptr, i8 0, i32 1, i1 true)144  ret i32 0145}146 147define i32 @test_in_range4(ptr %a) sanitize_hwaddress {148entry:149  ; CHECK-LABEL: @test_in_range4150  ; NOSAFETY: call {{.*}}__hwasan_generate_tag151  ; NOSAFETY: call {{.*}}__hwasan_memmove152  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag153  ; SAFETY-NOT: call {{.*}}__hwasan_memmove154  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag155  ; NOSTACK-NOT: call {{.*}}__hwasan_memmove156  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_in_range4157  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_in_range4158  %buf.sroa.0 = alloca [10 x i8], align 4159  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9160  call void @llvm.memmove.p0.p0.i32(ptr %ptr, ptr %ptr, i32 1, i1 true)161  ret i32 0162}163 164define i32 @test_in_range5(ptr %a) sanitize_hwaddress {165entry:166  ; CHECK-LABEL: @test_in_range5167  ; NOSAFETY: call {{.*}}__hwasan_generate_tag168  ; NOSAFETY: call {{.*}}__hwasan_memmove169  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag170  ; SAFETY-NOT: call {{.*}}__hwasan_memmove171  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag172  ; NOSTACK-NOT: call {{.*}}__hwasan_memmove173  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_in_range5174  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_in_range5175  %buf.sroa.0 = alloca [10 x i8], align 4176  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9177  %buf.sroa.1 = alloca [10 x i8], align 4178  %ptr1 = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9179  call void @llvm.memmove.p0.p0.i32(ptr %ptr, ptr %ptr1, i32 1, i1 true)180  ret i32 0181}182 183; Check an alloca with out of range GEP to ensure it gets a tag and check.184define i32 @test_out_of_range(ptr %a) sanitize_hwaddress {185entry:186  ; CHECK-LABEL: @test_out_of_range187  ; NOSAFETY: call {{.*}}__hwasan_generate_tag188  ; NOSAFETY: call {{.*}}__hwasan_store189  ; SAFETY: call {{.*}}__hwasan_generate_tag190  ; SAFETY: call {{.*}}__hwasan_store191  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag192  ; NOSTACK-NOT: call {{.*}}__hwasan_store193  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_out_of_range194  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_out_of_range195  %buf.sroa.0 = alloca [10 x i8], align 4196  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 10197  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)198  store volatile i8 0, ptr %ptr, align 4, !tbaa !8199  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)200  ret i32 0201}202 203define i32 @test_out_of_range2(ptr %a) sanitize_hwaddress {204entry:205  ; CHECK-LABEL: @test_out_of_range2206  ; NOSAFETY: call {{.*}}__hwasan_generate_tag207  ; NOSAFETY: call {{.*}}__hwasan_store208  ; SAFETY: call {{.*}}__hwasan_generate_tag209  ; SAFETY: call {{.*}}__hwasan_store210  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag211  ; NOSTACK-NOT: call {{.*}}__hwasan_store212  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_out_of_range2213  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_out_of_range2214  %buf.sroa.0 = alloca [10 x i8], align 4215  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 10216  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)217  %0 = cmpxchg ptr %ptr, i8 1, i8 2 monotonic monotonic, align 4218  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)219  ret i32 0220}221 222define i32 @test_out_of_range3(ptr %a) sanitize_hwaddress {223entry:224  ; CHECK-LABEL: @test_out_of_range3225  ; NOSAFETY: call {{.*}}__hwasan_generate_tag226  ; NOSAFETY: call {{.*}}__hwasan_memset227  ; SAFETY: call {{.*}}__hwasan_generate_tag228  ; SAFETY: call {{.*}}__hwasan_memset229  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag230  ; NOSTACK-NOT: call {{.*}}__hwasan_memset231  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_out_of_range3232  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_out_of_range3233  %buf.sroa.0 = alloca [10 x i8], align 4234  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9235  call void @llvm.memset.p0.i32(ptr %ptr, i8 0, i32 2, i1 true)236  ret i32 0237}238 239define i32 @test_out_of_range4(ptr %a) sanitize_hwaddress {240entry:241  ; CHECK-LABEL: @test_out_of_range4242  ; NOSAFETY: call {{.*}}__hwasan_generate_tag243  ; NOSAFETY: call {{.*}}__hwasan_memmove244  ; SAFETY: call {{.*}}__hwasan_generate_tag245  ; SAFETY: call {{.*}}__hwasan_memmove246  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag247  ; NOSTACK-NOT: call {{.*}}__hwasan_memmove248  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_out_of_range4249  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_out_of_range4250  %buf.sroa.0 = alloca [10 x i8], align 4251  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9252  call void @llvm.memmove.p0.p0.i32(ptr %ptr, ptr %ptr, i32 2, i1 true)253  ret i32 0254}255 256define i32 @test_out_of_range5(ptr %a) sanitize_hwaddress {257entry:258  ; CHECK-LABEL: @test_out_of_range5259  ; NOSAFETY: call {{.*}}__hwasan_generate_tag260  ; NOSAFETY: call {{.*}}__hwasan_memmove261  ; SAFETY: call {{.*}}__hwasan_generate_tag262  ; SAFETY: call {{.*}}__hwasan_memmove263  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag264  ; NOSTACK-NOT: call {{.*}}__hwasan_memmove265  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_out_of_range5266  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_out_of_range5267  %buf.sroa.0 = alloca [10 x i8], align 4268  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9269  %buf.sroa.1 = alloca [10 x i8], align 4270  %ptr1 = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9271  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)272  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)273  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.1)274  call void @llvm.memmove.p0.p0.i32(ptr %ptr, ptr %ptr1, i32 1, i1 true)275  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.1)276  ret i32 0277}278 279define i32 @test_out_of_range6(ptr %a) sanitize_hwaddress {280entry:281  ; CHECK-LABEL: @test_out_of_range6282  ; NOSAFETY: call {{.*}}__hwasan_generate_tag283  ; NOSAFETY: call {{.*}}__hwasan_store284  ; SAFETY: call {{.*}}__hwasan_generate_tag285  ; SAFETY: call {{.*}}__hwasan_store286  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag287  ; NOSTACK-NOT: call {{.*}}__hwasan_store288  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_out_of_range6289  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_out_of_range6290  %buf.sroa.0 = alloca [10 x i8], align 4291  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 10292  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)293  %0 = atomicrmw add ptr %ptr, i32 1 monotonic, align 4294  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)295  ret i32 0296}297 298define i32 @test_potentially_out_of_range2(ptr %a) sanitize_hwaddress {299entry:300  ; CHECK-LABEL: @test_potentially_out_of_range2301  ; NOSAFETY: call {{.*}}__hwasan_generate_tag302  ; NOSAFETY: call {{.*}}__hwasan_memmove303  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag304  ; SAFETY: call {{.*}}__hwasan_memmove305  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag306  ; NOSTACK: call {{.*}}__hwasan_memmove307  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_potentially_out_of_range2308  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_potentially_out_of_range2309  %buf.sroa.0 = alloca [10 x i8], align 4310  %ptr = getelementptr [10 x i8], ptr %buf.sroa.0, i32 0, i32 9311  call void @llvm.memmove.p0.p0.i32(ptr %ptr, ptr %a, i32 1, i1 true)312  ret i32 0313}314 315define i32 @test_select(ptr %a) sanitize_hwaddress {316entry:317  ; CHECK-LABEL: @test_select318  ; NOSAFETY: call {{.*}}__hwasan_generate_tag319  ; NOSAFETY: call {{.*}}__hwasan_store320  ; SAFETY: call {{.*}}__hwasan_generate_tag321  ; SAFETY: call {{.*}}__hwasan_store322  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag323  ; NOSTACK: call {{.*}}__hwasan_store324  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_select325  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_select326  %x = call ptr @getptr(ptr %a)327  %buf.sroa.0 = alloca i8, align 4328  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)329  %c = call i1 @cond()330  %ptr = select i1 %c, ptr %x, ptr %buf.sroa.0331  store volatile i8 0, ptr %ptr, align 4, !tbaa !8332  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)333  ret i32 0334}335 336; Check whether we see through the returns attribute of functions.337define i32 @test_retptr(ptr %a) sanitize_hwaddress {338entry:339  ; CHECK-LABEL: @test_retptr340  ; NOSAFETY: call {{.*}}__hwasan_generate_tag341  ; NOSAFETY: call {{.*}}__hwasan_store342  ; SAFETY: call {{.*}}__hwasan_generate_tag343  ; SAFETY-NOT: call {{.*}}__hwasan_store344  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag345  ; NOSTACK-NOT: call {{.*}}__hwasan_store346  ; SAFETY-REMARKS: --- !Missed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_retptr347  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_retptr348  %buf.sroa.0 = alloca i8, align 4349  call void @llvm.lifetime.start.p0(ptr nonnull %buf.sroa.0)350  %ptr = call ptr @retptr(ptr %buf.sroa.0)351  store volatile i8 0, ptr %ptr, align 4, !tbaa !8352  call void @llvm.lifetime.end.p0(ptr nonnull %buf.sroa.0)353  ret i32 0354}355 356; Check that lifetimes on poison are ignored.357define i32 @test_lifetime_poison(ptr %a) sanitize_hwaddress {358entry:359  ; CHECK-LABEL: @test_lifetime_poison360  ; NOSAFETY: call {{.*}}__hwasan_generate_tag361  ; NOSAFETY: call {{.*}}__hwasan_store362  ; SAFETY-NOT: call {{.*}}__hwasan_generate_tag363  ; SAFETY-NOT: call {{.*}}__hwasan_store364  ; NOSTACK-NOT: call {{.*}}__hwasan_generate_tag365  ; NOSTACK-NOT: call {{.*}}__hwasan_store366  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: safeAlloca{{[[:space:]]}}Function: test_lifetime_poison367  ; SAFETY-REMARKS: --- !Passed{{[[:space:]]}}Pass: hwasan{{[[:space:]]}}Name: ignoreAccess{{[[:space:]]}}Function: test_lifetime_poison368  %buf.sroa.0 = alloca i8, align 4369  call void @llvm.lifetime.start.p0(ptr poison)370  store volatile i8 0, ptr %buf.sroa.0, align 4, !tbaa !8371  call void @llvm.lifetime.end.p0(ptr poison)372  ret i32 0373}374 375; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn376declare void @llvm.lifetime.start.p0(ptr nocapture)377 378; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn379declare void @llvm.lifetime.end.p0(ptr nocapture)380 381declare void @llvm.memset.p0.i32(ptr, i8, i32, i1)382declare void @llvm.memcpy.p0.p0.i32(ptr, ptr, i32, i1)383declare void @llvm.memmove.p0.p0.i32(ptr, ptr, i32, i1)384 385declare i1 @cond()386declare void @use(ptr nocapture)387declare i32 @getoffset()388declare ptr @getptr(ptr nocapture)389declare ptr @retptr(ptr returned)390 391!8 = !{!9, !9, i64 0}392!9 = !{!"omnipotent char", !10, i64 0}393!10 = !{!"Simple C/C++ TBAA"}394