Add negative impls for *const T and *mut T

This commit is contained in:
Flavio Percoco
2015-01-26 21:30:56 +01:00
parent ad3e748128
commit bd511f73be
3 changed files with 11 additions and 2 deletions

View File

@@ -68,6 +68,7 @@
#![feature(staged_api)]
#![feature(unboxed_closures)]
#![feature(rustc_attrs)]
#![feature(optin_builtin_traits)]
#[macro_use]
mod macros;

View File

@@ -49,6 +49,9 @@ pub unsafe trait Send : MarkerTrait {
// empty.
}
impl<T> !Send for *const T { }
impl<T> !Send for *mut T { }
/// Types with a constant size known at compile-time.
#[stable(feature = "rust1", since = "1.0.0")]
#[lang="sized"]
@@ -214,6 +217,9 @@ pub unsafe trait Sync : MarkerTrait {
// Empty
}
impl<T> !Sync for *const T { }
impl<T> !Sync for *mut T { }
/// A type which is considered "not POD", meaning that it is not
/// implicitly copyable. This is typically embedded in other types to
/// ensure that they are never copied, even if they lack a destructor.

View File

@@ -1377,8 +1377,10 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
ty::BoundSync |
ty::BoundSend => {
// sync and send are not implemented for *const, *mut
Err(Unimplemented)
self.tcx().sess.bug(
&format!(
"raw pointers should have a negative \
impl for `Send` and `Sync`")[]);
}
}
}