about summary refs log tree commit diff
diff options
context:
space:
mode:
authorleonardo.yvens <leoyvens@gmail.com>2017-12-04 20:55:14 -0200
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-01-13 18:49:28 +0300
commit8b4d852f32b6bf3fdec2cce6c0d2804b27d02a20 (patch)
treeb0dd0d344790daffb6af14ca47e770cfd2a250e9
parent4e3953bbdd58892844a1bd2b7f4a2336a8acea5e (diff)
downloadrust-8b4d852f32b6bf3fdec2cce6c0d2804b27d02a20.tar.gz
rust-8b4d852f32b6bf3fdec2cce6c0d2804b27d02a20.zip
Address review.
-rw-r--r--src/librustc_passes/ast_validation.rs6
-rw-r--r--src/librustc_passes/diagnostics.rs4
-rw-r--r--src/librustc_typeck/collect.rs53
-rw-r--r--src/libsyntax/parse/parser.rs8
-rw-r--r--src/test/compile-fail/auto-trait-validation.rs6
-rw-r--r--src/test/ui/feature-gate-optin-builtin-traits.stderr14
6 files changed, 16 insertions, 75 deletions
diff --git a/src/librustc_passes/ast_validation.rs b/src/librustc_passes/ast_validation.rs
index ba819cbf538..8342af6011d 100644
--- a/src/librustc_passes/ast_validation.rs
+++ b/src/librustc_passes/ast_validation.rs
@@ -248,15 +248,15 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
                     // Auto traits cannot have generics, super traits nor contain items.
                     if generics.is_parameterized() {
                         struct_span_err!(self.session, item.span, E0567,
-                                        "Auto traits cannot have generic parameters").emit();
+                                        "auto traits cannot have generic parameters").emit();
                     }
                     if !bounds.is_empty() {
                         struct_span_err!(self.session, item.span, E0568,
-                                        "Auto traits cannot have predicates").emit();
+                                        "auto traits cannot have super traits").emit();
                     }
                     if !trait_items.is_empty() {
                         struct_span_err!(self.session, item.span, E0380,
-                                "Auto traits cannot have methods or associated items").emit();
+                                "auto traits cannot have methods or associated items").emit();
                     }
                 }
                 self.no_questions_in_bounds(bounds, "supertraits", true);
diff --git a/src/librustc_passes/diagnostics.rs b/src/librustc_passes/diagnostics.rs
index 2244463518e..cbfdace7e0f 100644
--- a/src/librustc_passes/diagnostics.rs
+++ b/src/librustc_passes/diagnostics.rs
@@ -271,7 +271,7 @@ register_diagnostics! {
     E0226, // only a single explicit lifetime bound is permitted
     E0472, // asm! is unsupported on this target
     E0561, // patterns aren't allowed in function pointer types
-    E0567, // auto traits can not have type parameters
-    E0568, // auto traits can not have predicates
+    E0567, // auto traits can not have generic parameters
+    E0568, // auto traits can not have super traits
     E0642, // patterns aren't allowed in methods without bodies
 }
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs
index 4754aaceff4..5485045b704 100644
--- a/src/librustc_typeck/collect.rs
+++ b/src/librustc_typeck/collect.rs
@@ -714,7 +714,7 @@ fn trait_def<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
 
     let (is_auto, unsafety) = match item.node {
         hir::ItemTrait(is_auto, unsafety, ..) => (is_auto == hir::IsAuto::Yes, unsafety),
-        hir::ItemTraitAlias(..) => (hir::IsAuto::No, hir::Unsafety::Normal),
+        hir::ItemTraitAlias(..) => (false, hir::Unsafety::Normal),
         _ => span_bug!(item.span, "trait_def_of_item invoked on non-trait"),
     };
 
@@ -1714,54 +1714,3 @@ fn is_foreign_item<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
         _ => bug!("is_foreign_item applied to non-local def-id {:?}", def_id)
     }
 }
-
-struct ImplTraitUniversalInfo<'hir> {
-    id: ast::NodeId,
-    def_id: DefId,
-    span: Span,
-    bounds: &'hir [hir::TyParamBound],
-}
-
-/// Take some possible list of arguments and return the DefIds of the ImplTraitUniversal
-/// arguments
-fn extract_universal_impl_trait_info<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
-                                               opt_inputs: Option<&'tcx [P<hir::Ty>]>)
-                                               -> Vec<ImplTraitUniversalInfo<'tcx>>
-{
-    // A visitor for simply collecting Universally quantified impl Trait arguments
-    struct ImplTraitUniversalVisitor<'tcx> {
-        items: Vec<&'tcx hir::Ty>
-    }
-
-    impl<'tcx> Visitor<'tcx> for ImplTraitUniversalVisitor<'tcx> {
-        fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
-            NestedVisitorMap::None
-        }
-
-        fn visit_ty(&mut self, ty: &'tcx hir::Ty) {
-            if let hir::TyImplTraitUniversal(..) = ty.node {
-                self.items.push(ty);
-            }
-            intravisit::walk_ty(self, ty);
-        }
-    }
-
-    let mut visitor = ImplTraitUniversalVisitor { items: Vec::new() };
-
-    if let Some(inputs) = opt_inputs {
-        for t in inputs.iter() {
-            visitor.visit_ty(t);
-        }
-    }
-
-    visitor.items.into_iter().map(|ty| if let hir::TyImplTraitUniversal(_, ref bounds) = ty.node {
-        ImplTraitUniversalInfo {
-            id: ty.id,
-            def_id: tcx.hir.local_def_id(ty.id),
-            span: ty.span,
-            bounds: bounds
-        }
-    } else {
-        span_bug!(ty.span, "this type should be a universally quantified impl trait. this is a bug")
-    }).collect()
-}
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 884e7d1f6ad..ce42b05b8bb 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -6370,8 +6370,8 @@ impl<'a> Parser<'a> {
             let is_auto = if self.eat_keyword(keywords::Trait) {
                 IsAuto::No
             } else {
-                self.eat_keyword(keywords::Auto);
-                self.eat_keyword(keywords::Trait);
+                self.expect_keyword(keywords::Auto)?;
+                self.expect_keyword(keywords::Trait)?;
                 IsAuto::Yes
             };
             let (ident, item_, extra_attrs) =
@@ -6485,8 +6485,8 @@ impl<'a> Parser<'a> {
             let is_auto = if self.eat_keyword(keywords::Trait) {
                 IsAuto::No
             } else {
-                self.eat_keyword(keywords::Auto);
-                self.eat_keyword(keywords::Trait);
+                self.expect_keyword(keywords::Auto)?;
+                self.expect_keyword(keywords::Trait)?;
                 IsAuto::Yes
             };
             // TRAIT ITEM
diff --git a/src/test/compile-fail/auto-trait-validation.rs b/src/test/compile-fail/auto-trait-validation.rs
index 782e352c471..92b222e1322 100644
--- a/src/test/compile-fail/auto-trait-validation.rs
+++ b/src/test/compile-fail/auto-trait-validation.rs
@@ -11,9 +11,9 @@
 #![feature(optin_builtin_traits)]
 
 auto trait Generic<T> {}
-//~^ Auto traits cannot have type parameters [E0567]
+//~^ auto traits cannot have generic parameters [E0567]
 auto trait Bound : Copy {}
-//~^ Auto traits cannot have predicates [E0568]
+//~^ auto traits cannot have super traits [E0568]
 auto trait MyTrait { fn foo() {} }
-//~^ Auto traits cannot have methods or associated items [E0380]
+//~^ auto traits cannot have methods or associated items [E0380]
 fn main() {}
diff --git a/src/test/ui/feature-gate-optin-builtin-traits.stderr b/src/test/ui/feature-gate-optin-builtin-traits.stderr
index c5e9614c29a..d66da1224f8 100644
--- a/src/test/ui/feature-gate-optin-builtin-traits.stderr
+++ b/src/test/ui/feature-gate-optin-builtin-traits.stderr
@@ -6,21 +6,13 @@ error: auto traits are experimental and possibly buggy (see issue #13231)
    |
    = help: add #![feature(optin_builtin_traits)] to the crate attributes to enable
 
-error: auto trait implementations are experimental and possibly buggy (see issue #13231)
-  --> $DIR/feature-gate-optin-builtin-traits.rs:24:1
-   |
-24 | impl DummyTrait for .. {}
-   | ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = help: add #![feature(optin_builtin_traits)] to the crate attributes to enable
-
 error: negative trait bounds are not yet fully implemented; use marker types for now (see issue #13231)
-  --> $DIR/feature-gate-optin-builtin-traits.rs:27:1
+  --> $DIR/feature-gate-optin-builtin-traits.rs:23:1
    |
-27 | impl !DummyTrait for DummyStruct {}
+23 | impl !DummyTrait for DummyStruct {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: add #![feature(optin_builtin_traits)] to the crate attributes to enable
 
-error: aborting due to 3 previous errors
+error: aborting due to 2 previous errors