From 7a52932f4cd65f57bcc8d77f12e32066b2a9c432 Mon Sep 17 00:00:00 2001 From: Ulrik Sverdrup Date: Fri, 13 Feb 2015 20:31:09 +0100 Subject: [PATCH] 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] --- src/libcore/raw.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libcore/raw.rs b/src/libcore/raw.rs index 81edfe7d6e26..bb0c22d3561d 100644 --- a/src/libcore/raw.rs +++ b/src/libcore/raw.rs @@ -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 { +pub unsafe trait Repr { /// 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 { fn repr(&self) -> T { unsafe { mem::transmute_copy(&self) } } } -impl Repr> for [T] {} -impl Repr> for str {} +unsafe impl Repr> for [T] {} +unsafe impl Repr> for str {}