about summary refs log tree commit diff
path: root/compiler/rustc_data_structures/src/aligned.rs
diff options
context:
space:
mode:
authorDavid Wood <david.wood2@arm.com>2025-02-10 14:18:20 +0000
committerDavid Wood <david.wood2@arm.com>2025-06-16 23:04:33 +0000
commit884d0e031a046af894b43180032c1803bb6d0834 (patch)
treeba91549781031a904380e0e4052e1bc4faa632cd /compiler/rustc_data_structures/src/aligned.rs
parent322cc315040da14c12f84d74fd5761c5d064e50e (diff)
downloadrust-884d0e031a046af894b43180032c1803bb6d0834.tar.gz
rust-884d0e031a046af894b43180032c1803bb6d0834.zip
library/compiler: add `PointeeSized` bounds
As core uses an extern type (`ptr::VTable`), the default `?Sized` to
`MetaSized` migration isn't sufficient, and some code that previously
accepted `VTable` needs relaxed to continue to accept extern types.

Similarly, the compiler uses many extern types in `rustc_codegen_llvm`
and in the `rustc_middle::ty::List` implementation (`OpaqueListContents`)
some bounds must be relaxed to continue to accept these types.

Unfortunately, due to the current inability to relax `Deref::Target`,
some of the bounds in the standard library are forced to be stricter than
they ideally would be.
Diffstat (limited to 'compiler/rustc_data_structures/src/aligned.rs')
-rw-r--r--compiler/rustc_data_structures/src/aligned.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/rustc_data_structures/src/aligned.rs b/compiler/rustc_data_structures/src/aligned.rs
index a636d09fcae..111740e5509 100644
--- a/compiler/rustc_data_structures/src/aligned.rs
+++ b/compiler/rustc_data_structures/src/aligned.rs
@@ -1,5 +1,7 @@
 use std::ptr::Alignment;
 
+use rustc_serialize::PointeeSized;
+
 /// Returns the ABI-required minimum alignment of a type in bytes.
 ///
 /// This is equivalent to [`align_of`], but also works for some unsized
@@ -17,7 +19,7 @@ pub const fn align_of<T: ?Sized + Aligned>() -> Alignment {
 /// example `[T]` has alignment of `T`.
 ///
 /// [`align_of::<Self>()`]: align_of
-pub unsafe trait Aligned {
+pub unsafe trait Aligned: PointeeSized {
     /// Alignment of `Self`.
     const ALIGN: Alignment;
 }