From 1195cc02bb4fa01d4c7d821da0d25fe6348b9bb0 Mon Sep 17 00:00:00 2001 From: "Martin Kolinek (from Dev Box)" Date: Tue, 16 Jun 2026 15:30:02 +0200 Subject: [PATCH] test(multitude): gate feature-gated over-aligned tests behind utc_backend The bytemuck_integration and zerocopy_integration test files (compiled only under --all-features, which the publish pipeline uses) each declare a 64 KiB-aligned OverAligned type to drive the allocator over-alignment guards. These were missed by PR #501 because default-feature builds do not compile them, so the UTC publish pipeline --all-features build failed with invalid alignment ... UTC supports at most 8192B. Gate the OverAligned type and every test that references it behind not(utc_backend), combining with the existing not(target_os windows) gates where present. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../multitude/tests/bytemuck_integration.rs | 21 ++++++++++++------- .../multitude/tests/zerocopy_integration.rs | 20 +++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/crates/multitude/tests/bytemuck_integration.rs b/crates/multitude/tests/bytemuck_integration.rs index 271eaa9c1..e8bf65282 100644 --- a/crates/multitude/tests/bytemuck_integration.rs +++ b/crates/multitude/tests/bytemuck_integration.rs @@ -157,6 +157,7 @@ fn try_alloc_slice_arc_ok() { // stack cannot satisfy a 64 KiB-aligned frame. The non-slice // `try_*_over_aligned_returns_err` siblings exercise the same // alignment-rejection guard on every platform. +#[cfg(not(utc_backend))] #[derive(Clone, Copy)] #[repr(C, align(65536))] struct OverAligned { @@ -164,9 +165,11 @@ struct OverAligned { } // SAFETY: all-zeros is a valid OverAligned (it's just a u8 + padding). +#[cfg(not(utc_backend))] unsafe impl Zeroable for OverAligned {} #[test] +#[cfg(not(utc_backend))] fn try_alloc_box_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.bytemuck().try_alloc_box::(); @@ -174,6 +177,7 @@ fn try_alloc_box_over_aligned_returns_err() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_arc_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.bytemuck().try_alloc_arc::(); @@ -181,6 +185,7 @@ fn try_alloc_arc_over_aligned_returns_err() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_slice_box_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.bytemuck().try_alloc_slice_box::(4); @@ -188,6 +193,7 @@ fn try_alloc_slice_box_over_aligned_returns_err() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_slice_arc_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.bytemuck().try_alloc_slice_arc::(4); @@ -195,7 +201,7 @@ fn try_alloc_slice_arc_over_aligned_returns_err() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_box_panics_on_over_aligned() { let arena = Arena::new(); @@ -203,7 +209,7 @@ fn alloc_box_panics_on_over_aligned() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_arc_panics_on_over_aligned() { let arena = Arena::new(); @@ -211,7 +217,7 @@ fn alloc_arc_panics_on_over_aligned() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_slice_box_panics_on_over_aligned() { let arena = Arena::new(); @@ -219,7 +225,7 @@ fn alloc_slice_box_panics_on_over_aligned() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_slice_arc_panics_on_over_aligned() { let arena = Arena::new(); @@ -256,6 +262,7 @@ fn try_alloc_ref_scalar_ok() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_ref_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.bytemuck().try_alloc::(); @@ -263,7 +270,7 @@ fn try_alloc_ref_over_aligned_returns_err() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_ref_panics_on_over_aligned() { let arena = Arena::new(); @@ -301,7 +308,7 @@ fn try_alloc_slice_ref_ok() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] fn try_alloc_slice_ref_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.bytemuck().try_alloc_slice::(4); @@ -309,7 +316,7 @@ fn try_alloc_slice_ref_over_aligned_returns_err() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_slice_ref_panics_on_over_aligned() { let arena = Arena::new(); diff --git a/crates/multitude/tests/zerocopy_integration.rs b/crates/multitude/tests/zerocopy_integration.rs index 05ecba8dc..195d79c5d 100644 --- a/crates/multitude/tests/zerocopy_integration.rs +++ b/crates/multitude/tests/zerocopy_integration.rs @@ -127,6 +127,7 @@ fn try_alloc_slice_arc_ok() { // stack cannot satisfy a 64 KiB-aligned frame. The non-slice // `try_*_over_aligned_returns_err` siblings exercise the same // alignment-rejection guard on every platform. +#[cfg(not(utc_backend))] #[derive(FromZeros)] #[repr(C, align(65536))] struct OverAligned { @@ -134,6 +135,7 @@ struct OverAligned { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_box_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.zerocopy().try_alloc_box::(); @@ -141,6 +143,7 @@ fn try_alloc_box_over_aligned_returns_err() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_arc_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.zerocopy().try_alloc_arc::(); @@ -148,6 +151,7 @@ fn try_alloc_arc_over_aligned_returns_err() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_slice_box_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.zerocopy().try_alloc_slice_box::(4); @@ -155,6 +159,7 @@ fn try_alloc_slice_box_over_aligned_returns_err() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_slice_arc_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.zerocopy().try_alloc_slice_arc::(4); @@ -162,7 +167,7 @@ fn try_alloc_slice_arc_over_aligned_returns_err() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_box_panics_on_over_aligned() { let arena = Arena::new(); @@ -170,7 +175,7 @@ fn alloc_box_panics_on_over_aligned() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_arc_panics_on_over_aligned() { let arena = Arena::new(); @@ -178,7 +183,7 @@ fn alloc_arc_panics_on_over_aligned() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_slice_box_panics_on_over_aligned() { let arena = Arena::new(); @@ -186,7 +191,7 @@ fn alloc_slice_box_panics_on_over_aligned() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_slice_arc_panics_on_over_aligned() { let arena = Arena::new(); @@ -223,6 +228,7 @@ fn try_alloc_ref_scalar_ok() { } #[test] +#[cfg(not(utc_backend))] fn try_alloc_ref_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.zerocopy().try_alloc::(); @@ -230,7 +236,7 @@ fn try_alloc_ref_over_aligned_returns_err() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_ref_panics_on_over_aligned() { let arena = Arena::new(); @@ -268,7 +274,7 @@ fn try_alloc_slice_ref_ok() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] fn try_alloc_slice_ref_over_aligned_returns_err() { let arena = Arena::new(); let result = arena.zerocopy().try_alloc_slice::(4); @@ -276,7 +282,7 @@ fn try_alloc_slice_ref_over_aligned_returns_err() { } #[test] -#[cfg(not(target_os = "windows"))] +#[cfg(all(not(target_os = "windows"), not(utc_backend)))] #[should_panic = "arena allocation failed"] fn alloc_slice_ref_panics_on_over_aligned() { let arena = Arena::new();