about summary refs log tree commit diff
path: root/src/test/compile-fail/specialization/defaultimpl/validation.rs
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2017-12-02 22:15:03 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-01-14 18:10:05 +0300
commitd19e4c4a8507da7e35d0de2b196c48e6621de1f9 (patch)
treedf1852ce3a472b0d835c02f9686bbde9e21cb9e9 /src/test/compile-fail/specialization/defaultimpl/validation.rs
parent48ab4cde5460f9f7c57249e4e62ad569dc843dd8 (diff)
downloadrust-d19e4c4a8507da7e35d0de2b196c48e6621de1f9.tar.gz
rust-d19e4c4a8507da7e35d0de2b196c48e6621de1f9.zip
syntax: Rewrite parsing of impls
Properly parse impls for the never type `!`
Recover from missing `for` in `impl Trait for Type`
Prohibit inherent default impls and default impls of auto traits
Change wording in more diagnostics to use "auto traits"
Some minor code cleanups in the parser
Diffstat (limited to 'src/test/compile-fail/specialization/defaultimpl/validation.rs')
-rw-r--r--src/test/compile-fail/specialization/defaultimpl/validation.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/compile-fail/specialization/defaultimpl/validation.rs b/src/test/compile-fail/specialization/defaultimpl/validation.rs
new file mode 100644
index 00000000000..26b8b737f34
--- /dev/null
+++ b/src/test/compile-fail/specialization/defaultimpl/validation.rs
@@ -0,0 +1,23 @@
+// Copyright 2017 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(optin_builtin_traits)]
+#![feature(specialization)]
+
+struct S;
+struct Z;
+
+default impl S {} //~ ERROR inherent impls cannot be default
+
+default unsafe impl Send for S {} //~ ERROR impls of auto traits cannot be default
+default impl !Send for Z {} //~ ERROR impls of auto traits cannot be default
+
+trait Tr {}
+default impl !Tr for S {} //~ ERROR negative impls are only allowed for auto traits