1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals --version 2 2; Test basic address sanitizer instrumentation. 3; 4; RUN: opt < %s -passes=hwasan,hwasan -S | FileCheck %s 5 6target 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" 7target triple = "x86_64-unknown-linux-gnu" 8 9;. 10; CHECK: @llvm.used = appending global [1 x ptr] [ptr @hwasan.module_ctor], section "llvm.metadata" 11; CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @hwasan.module_ctor, ptr @hwasan.module_ctor }] 12; CHECK: @__start_hwasan_globals = external hidden constant [0 x i8] 13; CHECK: @__stop_hwasan_globals = external hidden constant [0 x i8] 14; CHECK: @hwasan.note = private constant { i32, i32, i32, [8 x i8], i32, i32 } { i32 8, i32 8, i32 3, [8 x i8] c"LLVM\00\00\00\00", i32 trunc (i64 sub (i64 ptrtoint (ptr @__start_hwasan_globals to i64), i64 ptrtoint (ptr @hwasan.note to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @__stop_hwasan_globals to i64), i64 ptrtoint (ptr @hwasan.note to i64)) to i32) }, section ".note.hwasan.globals", comdat($hwasan.module_ctor), align 4 15; CHECK: @hwasan.dummy.global = private constant [0 x i8] zeroinitializer, section "hwasan_globals", comdat($hwasan.module_ctor), !associated [[META0:![0-9]+]] 16; CHECK: @__hwasan_tls = external thread_local(initialexec) global i64 17; CHECK: @llvm.compiler.used = appending global [3 x ptr] [ptr @hwasan.note, ptr @hwasan.dummy.global, ptr @__hwasan_tls], section "llvm.metadata" 18; CHECK: @__hwasan_shadow = external global [0 x i8] 19;. 20define i8 @test_load8(ptr %a) sanitize_hwaddress { 21; CHECK: Function Attrs: sanitize_hwaddress 22; CHECK-LABEL: define i8 @test_load8 23; CHECK-SAME: (ptr [[A:%.*]]) #[[ATTR0:[0-9]+]] { 24; CHECK-NEXT: entry: 25; CHECK-NEXT: [[DOTHWASAN_SHADOW:%.*]] = call ptr asm "", "=r,0"(ptr null) 26; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[A]] to i64 27; CHECK-NEXT: call void @__hwasan_load1(i64 [[TMP0]]) 28; CHECK-NEXT: [[B:%.*]] = load i8, ptr [[A]], align 4 29; CHECK-NEXT: ret i8 [[B]] 30; 31entry: 32 %b = load i8, ptr %a, align 4 33 ret i8 %b 34} 35;. 36; CHECK: attributes #[[ATTR0]] = { sanitize_hwaddress } 37; CHECK: attributes #[[ATTR1:[0-9]+]] = { nounwind } 38;. 39; CHECK: [[META0]] = !{ptr @hwasan.note} 40; CHECK: [[META1:![0-9]+]] = !{i32 4, !"nosanitize_hwaddress", i32 1} 41;. 42