diff --git a/base/runtime/internal.odin b/base/runtime/internal.odin index 5d8c5a4de..bff5b8380 100644 --- a/base/runtime/internal.odin +++ b/base/runtime/internal.odin @@ -1107,11 +1107,9 @@ __read_bits :: proc "contextless" (dst, src: [^]byte, offset: uintptr, size: uin } } -@(no_sanitize_address) -__asan_unpoison_memory_region :: #force_inline proc "contextless" (address: rawptr, size: uint) { +when .Address in ODIN_SANITIZER_FLAGS { foreign { __asan_unpoison_memory_region :: proc "system" (address: rawptr, size: uint) --- } - __asan_unpoison_memory_region(address, size) } diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index d5e3e4c75..89737a454 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -2918,20 +2918,16 @@ gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlo defer (p->branch_location_pos = prev_token_pos); // TODO(lucas): In LLVM 21 use the 'use-after-scope' asan option which does this for us. - #if LLVM_VERSION_MAJOR < 21 - if (kind == lbDeferExit_Return) { - for_array(i, p->asan_stack_locals) { - lbValue local = p->asan_stack_locals[i]; + if (kind == lbDeferExit_Return) { + for_array(i, p->asan_stack_locals) { + lbValue local = p->asan_stack_locals[i]; - auto args = array_make(temporary_allocator(), 2); - args[0] = lb_emit_conv(p, local, t_rawptr); - args[1] = lb_const_int(p->module, t_int, type_size_of(local.type->Pointer.elem)); - lb_emit_runtime_call(p, "__asan_unpoison_memory_region", args); - } + auto args = array_make(temporary_allocator(), 2); + args[0] = lb_emit_conv(p, local, t_rawptr); + args[1] = lb_const_int(p->module, t_int, type_size_of(local.type->Pointer.elem)); + lb_emit_runtime_call(p, "__asan_unpoison_memory_region", args); } - #else - #error "Need to implement LLVM 21 'use-after-scope' asan option" - #endif + } isize count = p->defer_stmts.count; isize i = count;