1 #![expect(unsafe_op_in_unsafe_fn, reason = "old code, not worth updating yet")] 2 3 //! `wit-component` handles modules which export `cabi_realloc` in a special way, using it instead of `memory.grow` 4 //! to allocate the adapter stack, hence this test. 5 6 #[unsafe(export_name = "cabi_realloc")] 7 unsafe extern "C" fn cabi_realloc( 8 old_ptr: *mut u8, 9 old_len: usize, 10 align: usize, 11 new_len: usize, 12 ) -> *mut u8 { 13 use std::alloc::{self, Layout}; 14 15 let layout; 16 let ptr = if old_len == 0 { 17 if new_len == 0 { 18 return align as *mut u8; 19 } 20 layout = Layout::from_size_align_unchecked(new_len, align); 21 alloc::alloc(layout) 22 } else { 23 debug_assert_ne!(new_len, 0, "non-zero old_len requires non-zero new_len!"); 24 layout = Layout::from_size_align_unchecked(old_len, align); 25 alloc::realloc(old_ptr, layout, new_len) 26 }; 27 if ptr.is_null() { 28 #[cfg(target_arch = "wasm32")] 29 core::arch::wasm32::unreachable(); 30 } 31 return ptr; 32 } 33 34 fn main() { 35 println!("hello, world"); 36 } 37