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:
parent
5e3ae102db
commit
7a52932f4c
@ -154,7 +154,7 @@ pub struct TraitObject {
|
||||
|
||||
/// This trait is meant to map equivalences between raw structs and their
|
||||
/// corresponding rust values.
|
||||
pub trait Repr<T> {
|
||||
pub unsafe trait Repr<T> {
|
||||
/// This function "unwraps" a rust value (without consuming it) into its raw
|
||||
/// 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
|
||||
@ -163,5 +163,5 @@ pub trait Repr<T> {
|
||||
fn repr(&self) -> T { unsafe { mem::transmute_copy(&self) } }
|
||||
}
|
||||
|
||||
impl<T> Repr<Slice<T>> for [T] {}
|
||||
impl Repr<Slice<u8>> for str {}
|
||||
unsafe impl<T> Repr<Slice<T>> for [T] {}
|
||||
unsafe impl Repr<Slice<u8>> for str {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user