1macro_rules! debug_handleallocerror_precondition {
4 ($condition:expr, $layout:ident) => {
5 mirai_annotations::precondition!($condition);
6 if cfg!(debug_assertions) {
7 if !($condition) {
9 alloc::alloc::handle_alloc_error($layout);
10 }
11 }
12 };
13}
14
15macro_rules! debug_handleallocerror_precondition_valid_layout {
16 ($layout:ident) => {
17 mirai_annotations::precondition!(
18 core::alloc::Layout::from_size_align($layout.size(), $layout.align()).is_ok(),
19 "invalid layout"
20 );
21 if cfg!(debug_assertions) {
22 if core::alloc::Layout::from_size_align($layout.size(), $layout.align()).is_err() {
24 alloc::alloc::handle_alloc_error($layout);
25 }
26 }
27 };
28}
29
30macro_rules! precondition_memory_range {
31 ($ptr:expr, $len:expr) => {
32 mirai_annotations::precondition!(!($ptr.is_null()), "null pointer is never valid");
33 mirai_annotations::precondition!(
34 $ptr.addr().checked_add($len).is_some(),
35 "memory range wraps the address space"
36 );
37 };
38}
39
40pub(crate) use {
41 debug_handleallocerror_precondition, debug_handleallocerror_precondition_valid_layout,
42 precondition_memory_range,
43};