2
0
Lucas Perlind 4 сар өмнө
parent
commit
46e0c7ad74

+ 1 - 3
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)
 }
 

+ 8 - 12
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<lbValue>(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<lbValue>(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;