diff --git a/src/librustc_typeck/check/wf.rs b/src/librustc_typeck/check/wf.rs index baa4850ce4a..e6390212c60 100644 --- a/src/librustc_typeck/check/wf.rs +++ b/src/librustc_typeck/check/wf.rs @@ -76,6 +76,18 @@ impl<'ccx, 'tcx> CheckTypeWellFormedVisitor<'ccx, 'tcx> { ast::ItemImpl(_, ast::ImplPolarity::Positive, _, _, _, _) => { self.check_impl(item); } + ast::ItemImpl(_, ast::ImplPolarity::Negative, _, Some(ref tref), _, _) => { + let trait_ref = ty::node_id_to_trait_ref(ccx.tcx, tref.ref_id); + match ccx.tcx.lang_items.to_builtin_kind(trait_ref.def_id) { + Some(ty::BoundSend) | Some(ty::BoundSync) => {} + Some(_) | None => { + ccx.tcx.sess.span_err( + item.span, + format!("negative impls are currently \ + allowed just for `Send` and `Sync`").as_slice()) + } + } + } ast::ItemFn(..) => { self.check_item_type(item); } diff --git a/src/test/compile-fail/typeck-negative-impls-builtin.rs b/src/test/compile-fail/typeck-negative-impls-builtin.rs new file mode 100644 index 00000000000..9da79b11cf0 --- /dev/null +++ b/src/test/compile-fail/typeck-negative-impls-builtin.rs @@ -0,0 +1,20 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(optin_builtin_traits)] + +struct TestType; + +trait TestTrait {} + +impl !TestTrait for TestType {} +//~^ ERROR negative impls are currently allowed just for `Send` and `Sync` + +fn main() {}