about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2015-11-10 00:38:07 +0100
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2015-11-10 00:43:20 +0100
commitcd94222da2cbc95b7577d77b536bd4d3acf90d1a (patch)
treef83a094ce5c10c134e4aa82b01157ac1323f9d39 /src
parent278cc2f15766402d26b4173d636f765018b68878 (diff)
downloadrust-cd94222da2cbc95b7577d77b536bd4d3acf90d1a.tar.gz
rust-cd94222da2cbc95b7577d77b536bd4d3acf90d1a.zip
Add E0321 error explanation
Diffstat (limited to 'src')
-rw-r--r--src/librustc_typeck/diagnostics.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs
index 4f39ed43b44..2d7178bd55c 100644
--- a/src/librustc_typeck/diagnostics.rs
+++ b/src/librustc_typeck/diagnostics.rs
@@ -2677,6 +2677,28 @@ defined. For more information see the [opt-in builtin traits RFC](https://github
 .com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md).
 "##,
 
+E0321: r##"
+A cross-crate opt-out trait was implemented on something which wasn't a struct
+or enum type. Erroneous code example:
+
+```
+#![feature(optin_builtin_traits)]
+
+struct Foo;
+
+impl !Sync for Foo {}
+
+unsafe impl Send for &'static Foo {
+// error: cross-crate traits with a default impl, like `core::marker::Send`,
+//        can only be implemented for a struct/enum type, not
+//        `&'static Foo`
+```
+
+Only structs and enums are permitted to impl Send, Sync, and other opt-out
+trait, and the struct or enum must be local to the current crate. So, for
+example, `unsafe impl Send for Rc<Foo>` is not allowed.
+"##,
+
 E0322: r##"
 The `Sized` trait is a special trait built-in to the compiler for types with a
 constant size known at compile-time. This trait is automatically implemented
@@ -3463,7 +3485,6 @@ register_diagnostics! {
 //  E0246, // invalid recursive type
 //  E0319, // trait impls for defaulted traits allowed just for structs/enums
     E0320, // recursive overflow during dropck
-    E0321, // extended coherence rules for defaulted traits violated
     E0328, // cannot implement Unsize explicitly
     E0374, // the trait `CoerceUnsized` may only be implemented for a coercion
            // between structures with one field being coerced, none found