diff options
| author | leonardo.yvens <leoyvens@gmail.com> | 2017-12-04 20:55:14 -0200 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-01-13 18:49:28 +0300 |
| commit | 8b4d852f32b6bf3fdec2cce6c0d2804b27d02a20 (patch) | |
| tree | b0dd0d344790daffb6af14ca47e770cfd2a250e9 | |
| parent | 4e3953bbdd58892844a1bd2b7f4a2336a8acea5e (diff) | |
| download | rust-8b4d852f32b6bf3fdec2cce6c0d2804b27d02a20.tar.gz rust-8b4d852f32b6bf3fdec2cce6c0d2804b27d02a20.zip | |
Address review.
| -rw-r--r-- | src/librustc_passes/ast_validation.rs | 6 | ||||
| -rw-r--r-- | src/librustc_passes/diagnostics.rs | 4 | ||||
| -rw-r--r-- | src/librustc_typeck/collect.rs | 53 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 8 | ||||
| -rw-r--r-- | src/test/compile-fail/auto-trait-validation.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/feature-gate-optin-builtin-traits.stderr | 14 |
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 |
