diff --git a/library/alloc/src/raw_vec.rs b/library/alloc/src/raw_vec.rs index 8fa0242ca9a9f..0ce2beb63d681 100644 --- a/library/alloc/src/raw_vec.rs +++ b/library/alloc/src/raw_vec.rs @@ -244,9 +244,7 @@ impl RawVec { // We have an allocated chunk of memory, so we can bypass runtime // checks to get our current layout. unsafe { - let align = mem::align_of::(); - let size = mem::size_of::() * self.cap; - let layout = Layout::from_size_align_unchecked(size, align); + let layout = Layout::array::(self.cap).unwrap_unchecked(); Some((self.ptr.cast().into(), layout)) } } @@ -427,10 +425,11 @@ impl RawVec { assert!(cap <= self.capacity(), "Tried to shrink to a larger capacity"); let (ptr, layout) = if let Some(mem) = self.current_memory() { mem } else { return Ok(()) }; - let new_size = cap * mem::size_of::(); let ptr = unsafe { - let new_layout = Layout::from_size_align_unchecked(new_size, layout.align()); + // `Layout::array` cannot overflow here because it would have + // overflowed earlier when capacity was larger. + let new_layout = Layout::array::(cap).unwrap_unchecked(); self.alloc .shrink(ptr, layout, new_layout) .map_err(|_| AllocError { layout: new_layout, non_exhaustive: () })? diff --git a/src/test/ui/sanitize/hwaddress.rs b/src/test/ui/sanitize/hwaddress.rs index bb6986740d906..b988035f75e4c 100644 --- a/src/test/ui/sanitize/hwaddress.rs +++ b/src/test/ui/sanitize/hwaddress.rs @@ -1,6 +1,9 @@ // needs-sanitizer-support // needs-sanitizer-hwaddress // +// FIXME(#83706): this test triggers errors on aarch64-gnu +// ignore-aarch64-unknown-linux-gnu +// // FIXME(#83989): codegen-units=1 triggers linker errors on aarch64-gnu // compile-flags: -Z sanitizer=hwaddress -O -g -C codegen-units=16 //