36 lines · plain
1; Test basic address sanitizer instrumentation.2;3; RUN: opt -passes=asan -S < %s | FileCheck %s4 5target triple = "x86_64-pc-windows-msvc"6; CHECK: @llvm.global_ctors = {{.*}}@asan.module_ctor7 8define i32 @test_load(ptr %a) sanitize_address {9; First instrumentation in the function must be to load the dynamic shadow10; address into a local variable.11; CHECK-LABEL: @test_load12; CHECK: entry:13; CHECK-NEXT: %[[SHADOW:[^ ]*]] = load i64, ptr @__asan_shadow_memory_dynamic_address14 15; Shadow address is loaded and added into the whole offset computation.16; CHECK: add i64 %{{.*}}, %[[SHADOW]]17 18entry:19 %tmp1 = load i32, ptr %a, align 420 ret i32 %tmp121}22 23define i32 @__asan_options(ptr %a) sanitize_address {24; Asan functions are not instrumented. Asan function may be called by25; __asan_init before the shadow initialisation, which may lead to incorrect26; behavior of the instrumented code.27; CHECK-LABEL: @__asan_options28; CHECK: entry:29; CHECK-NEXT: %tmp1 = load i32, ptr %a, align 430; CHECK-NEXT: ret i32 %tmp131 32entry:33 %tmp1 = load i32, ptr %a, align 434 ret i32 %tmp135}36