Add negative impls for Sync
This commit is contained in:
@@ -144,7 +144,7 @@
|
||||
use clone::Clone;
|
||||
use cmp::PartialEq;
|
||||
use default::Default;
|
||||
use marker::{Copy, Send};
|
||||
use marker::{Copy, Send, Sync};
|
||||
use ops::{Deref, DerefMut, Drop};
|
||||
use option::Option;
|
||||
use option::Option::{None, Some};
|
||||
@@ -660,6 +660,8 @@ pub struct UnsafeCell<T> {
|
||||
pub value: T,
|
||||
}
|
||||
|
||||
impl<T> !Sync for UnsafeCell<T> {}
|
||||
|
||||
impl<T> UnsafeCell<T> {
|
||||
/// Construct a new instance of `UnsafeCell` which will wrap the specified
|
||||
/// value.
|
||||
|
||||
@@ -51,6 +51,7 @@ pub unsafe trait Send : MarkerTrait {
|
||||
|
||||
impl<T> !Send for *const T { }
|
||||
impl<T> !Send for *mut T { }
|
||||
impl !Send for Managed { }
|
||||
|
||||
/// Types with a constant size known at compile-time.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@@ -219,6 +220,7 @@ pub unsafe trait Sync : MarkerTrait {
|
||||
|
||||
impl<T> !Sync for *const T { }
|
||||
impl<T> !Sync for *mut T { }
|
||||
impl !Sync for Managed { }
|
||||
|
||||
/// A type which is considered "not POD", meaning that it is not
|
||||
/// implicitly copyable. This is typically embedded in other types to
|
||||
|
||||
@@ -826,6 +826,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
}
|
||||
Some(bound @ ty::BoundSend) |
|
||||
Some(bound @ ty::BoundSync) => {
|
||||
// Ideally, we shouldn't sepcial case Send/Sync. This will be unified
|
||||
// as soon as default trait implementations for these traits land.
|
||||
try!(self.assemble_candidates_from_impls(obligation, &mut candidates));
|
||||
|
||||
// No explicit impls were declared for this type, consider the fallback rules.
|
||||
@@ -1599,27 +1601,13 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
-> Result<BuiltinBoundConditions<'tcx>,SelectionError<'tcx>>
|
||||
{
|
||||
// First check for markers and other nonsense.
|
||||
let tcx = this.tcx();
|
||||
match bound {
|
||||
ty::BoundSend => {
|
||||
if Some(def_id) == tcx.lang_items.managed_bound() {
|
||||
return Err(Unimplemented)
|
||||
}
|
||||
}
|
||||
|
||||
ty::BoundCopy => {
|
||||
return Ok(ParameterBuiltin)
|
||||
}
|
||||
|
||||
ty::BoundSync => {
|
||||
if
|
||||
Some(def_id) == tcx.lang_items.managed_bound() ||
|
||||
Some(def_id) == tcx.lang_items.unsafe_cell_type()
|
||||
{
|
||||
return Err(Unimplemented)
|
||||
}
|
||||
}
|
||||
|
||||
ty::BoundSend |
|
||||
ty::BoundSync |
|
||||
ty::BoundSized => { }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user