Skip to content

Commit

Permalink
Rollup merge of #121358 - GnomedDev:lower-align-typeid, r=Mark-Simula…
Browse files Browse the repository at this point in the history
…crum

Reduce alignment of TypeId to u64 alignment

Closes #115620
  • Loading branch information
matthiaskrgr authored Mar 9, 2024
2 parents b054da8 + f142476 commit a1f6191
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions library/core/src/any.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
Expand Down Expand Up @@ -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) }
}
}

Expand All @@ -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);
}
}

Expand Down

0 comments on commit a1f6191

Please sign in to comment.