From 5e5e520654b3b7e3bbf99a5161398fff412e9c40 Mon Sep 17 00:00:00 2001 From: Chris Fallin Date: Wed, 11 Nov 2020 13:47:36 -0800 Subject: [PATCH] Remove size-of-struct asserts that break with some Rust versions. The asserts on the sizes of the VCode constant-table data structures introduced in PR #2328 are dependent on the size of data structures such as `HashMap` in the standard library, which can change. In particular, on Rust 1.46 (which is not current, but could be e.g. pinned by a project using Cranelift), it appears that these asserts fail. We shouldn't depend on stdlib internals; IMHO the asserts on our own struct sizes are enough to catch accidental size blowups. --- cranelift/codegen/src/machinst/vcode.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/cranelift/codegen/src/machinst/vcode.rs b/cranelift/codegen/src/machinst/vcode.rs index 1ca1b25ce3..c57f018e35 100644 --- a/cranelift/codegen/src/machinst/vcode.rs +++ b/cranelift/codegen/src/machinst/vcode.rs @@ -876,7 +876,7 @@ impl VCodeConstantData { #[cfg(test)] mod test { use super::*; - use std::mem::{size_of, size_of_val}; + use std::mem::size_of; #[test] fn size_of_constant_structs() { @@ -888,11 +888,8 @@ mod test { size_of::>(), 24 ); - assert_eq!(size_of::>(), 48); - assert_eq!(size_of::>(), 48); - assert_eq!(size_of::(), 120); - assert_eq!(size_of_val(&VCodeConstants::with_capacity(0)), 120); - // TODO This structure could use some significant memory-size optimization. The use of - // HashMap to deduplicate both pool and well-known constants is clearly an issue. + // TODO The VCodeConstants structure's memory size could be further optimized. + // With certain versions of Rust, each `HashMap` in `VCodeConstants` occupied at + // least 48 bytes, making an empty `VCodeConstants` cost 120 bytes. } }