Rollup merge of - GnomedDev:lower-align-typeid, r=Mark-Simulacrum

Reduce alignment of TypeId to u64 alignment

Closes 
This commit is contained in:
Matthias Krüger 2024-03-09 16:21:14 +01:00 committed by GitHub
commit a1f6191e0e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -605,7 +605,9 @@ impl dyn Any + Send + Sync {
#[derive(Clone, Copy, Debug, Eq, PartialOrd, Ord)]
#[stable(feature = "rust1", since = "1.0.0")]
pub struct TypeId {
t: u128,
// We avoid using `u128` because that imposes higher alignment requirements on many platforms.
// See issue #115620 for more information.
t: (u64, u64),
}
#[stable(feature = "rust1", since = "1.0.0")]
@ -637,7 +639,10 @@ impl TypeId {
#[rustc_const_unstable(feature = "const_type_id", issue = "77125")]
pub const fn of<T: ?Sized + 'static>() -> TypeId {
let t: u128 = intrinsics::type_id::<T>();
TypeId { t }
let t1 = (t >> 64) as u64;
let t2 = t as u64;
TypeId { t: (t1, t2) }
}
}
@ -657,7 +662,7 @@ impl hash::Hash for TypeId {
// - It is correct to do so -- only hashing a subset of `self` is still
// with an `Eq` implementation that considers the entire value, as
// ours does.
(self.t as u64).hash(state);
self.t.1.hash(state);
}
}