Make std::raw::Repr an unsafe trait
The default implementation of .repr() will call conveniently call transmute_copy which should be appropriate for all implementors, but is memory unsafe if used wrong. Fixes #22260 You need to use `unsafe impl` to implement the Repr trait now. [breaking-change]
This commit is contained in:
committed by
Huon Wilson
parent
5e3ae102db
commit
7a52932f4c
@@ -154,7 +154,7 @@ pub struct TraitObject {
|
|||||||
|
|
||||||
/// This trait is meant to map equivalences between raw structs and their
|
/// This trait is meant to map equivalences between raw structs and their
|
||||||
/// corresponding rust values.
|
/// corresponding rust values.
|
||||||
pub trait Repr<T> {
|
pub unsafe trait Repr<T> {
|
||||||
/// This function "unwraps" a rust value (without consuming it) into its raw
|
/// This function "unwraps" a rust value (without consuming it) into its raw
|
||||||
/// struct representation. This can be used to read/write different values
|
/// struct representation. This can be used to read/write different values
|
||||||
/// for the struct. This is a safe method because by default it does not
|
/// for the struct. This is a safe method because by default it does not
|
||||||
@@ -163,5 +163,5 @@ pub trait Repr<T> {
|
|||||||
fn repr(&self) -> T { unsafe { mem::transmute_copy(&self) } }
|
fn repr(&self) -> T { unsafe { mem::transmute_copy(&self) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Repr<Slice<T>> for [T] {}
|
unsafe impl<T> Repr<Slice<T>> for [T] {}
|
||||||
impl Repr<Slice<u8>> for str {}
|
unsafe impl Repr<Slice<u8>> for str {}
|
||||||
|
|||||||
Reference in New Issue
Block a user