diff --git a/src/librustc_typeck/check/wfcheck.rs b/src/librustc_typeck/check/wfcheck.rs index ea84e874b1a5..527ba276de27 100644 --- a/src/librustc_typeck/check/wfcheck.rs +++ b/src/librustc_typeck/check/wfcheck.rs @@ -153,6 +153,9 @@ pub fn check_item_well_formed<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: Def hir::ItemKind::Trait(..) => { check_trait(tcx, item); } + hir::ItemKind::TraitAlias(..) => { + check_trait(tcx, item); + } _ => {} } } diff --git a/src/test/ui/traits/trait-alias-fail1.stderr b/src/test/ui/traits/trait-alias-fail1.stderr deleted file mode 100644 index 447f4b1b9de9..000000000000 --- a/src/test/ui/traits/trait-alias-fail1.stderr +++ /dev/null @@ -1,46 +0,0 @@ -error: type parameters on the left side of a trait alias cannot be bounded - --> $DIR/trait-alias-fail1.rs:14:20 - | -LL | trait BoundedAlias = Default; - | ^ - -error: type parameters on the left side of a trait alias cannot have defaults - --> $DIR/trait-alias-fail1.rs:14:20 - | -LL | trait BoundedAlias = Default; - | ^ - -error[E0404]: expected trait, found trait alias `CloneDefault` - --> $DIR/trait-alias-fail1.rs:19:6 - | -LL | impl CloneDefault for () {} - | ^^^^^^^^^^^^ not a trait - -error[E0658]: trait aliases are experimental (see issue #41517) - --> $DIR/trait-alias-fail1.rs:13:1 - | -LL | trait CloneDefault = Default where T: Clone; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(trait_alias)] to the crate attributes to enable - -error[E0658]: trait aliases are experimental (see issue #41517) - --> $DIR/trait-alias-fail1.rs:14:1 - | -LL | trait BoundedAlias = Default; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(trait_alias)] to the crate attributes to enable - -error[E0658]: trait aliases are experimental (see issue #41517) - --> $DIR/trait-alias-fail1.rs:17:1 - | -LL | trait B = A; // FIXME: parameter T should need a bound here, or semantics should be changed - | ^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(trait_alias)] to the crate attributes to enable - -error: aborting due to 6 previous errors - -Some errors occurred: E0404, E0658. -For more information about an error, try `rustc --explain E0404`. diff --git a/src/test/ui/traits/trait-alias-fail2.stderr b/src/test/ui/traits/trait-alias-fail2.stderr deleted file mode 100644 index 6ebd8b5e7317..000000000000 --- a/src/test/ui/traits/trait-alias-fail2.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0658]: trait aliases are experimental (see issue #41517) - --> $DIR/trait-alias-fail2.rs:13:1 - | -LL | trait EqAlias = Eq; - | ^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(trait_alias)] to the crate attributes to enable - -error[E0658]: trait aliases are experimental (see issue #41517) - --> $DIR/trait-alias-fail2.rs:14:1 - | -LL | trait IteratorAlias = Iterator; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(trait_alias)] to the crate attributes to enable - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/traits/trait-alias-impl.rs b/src/test/ui/traits/trait-alias-impl.rs new file mode 100644 index 000000000000..bf3483000e3b --- /dev/null +++ b/src/test/ui/traits/trait-alias-impl.rs @@ -0,0 +1,17 @@ +// Copyright 2018 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(trait_alias)] + +trait DefaultAlias = Default; + +impl DefaultAlias for () {} + +fn main() {} diff --git a/src/test/ui/traits/trait-alias-impl.stderr b/src/test/ui/traits/trait-alias-impl.stderr new file mode 100644 index 000000000000..9ad625176b14 --- /dev/null +++ b/src/test/ui/traits/trait-alias-impl.stderr @@ -0,0 +1,9 @@ +error[E0404]: expected trait, found trait alias `DefaultAlias` + --> $DIR/trait-alias-impl.rs:15:6 + | +LL | impl DefaultAlias for () {} + | ^^^^^^^^^^^^ not a trait + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0404`. diff --git a/src/test/ui/traits/trait-alias-fail2.rs b/src/test/ui/traits/trait-alias-objects.rs similarity index 100% rename from src/test/ui/traits/trait-alias-fail2.rs rename to src/test/ui/traits/trait-alias-objects.rs diff --git a/src/test/ui/traits/trait-alias-objects.stderr b/src/test/ui/traits/trait-alias-objects.stderr new file mode 100644 index 000000000000..8f9681e898fe --- /dev/null +++ b/src/test/ui/traits/trait-alias-objects.stderr @@ -0,0 +1,18 @@ +error[E0038]: the trait `EqAlias` cannot be made into an object + --> $DIR/trait-alias-objects.rs:17:13 + | +LL | let _: &dyn EqAlias = &123; + | ^^^^^^^^^^^ the trait `EqAlias` cannot be made into an object + | + = note: the trait cannot use `Self` as a type parameter in the supertraits or where-clauses + +error[E0191]: the value of the associated type `Item` (from the trait `std::iter::Iterator`) must be specified + --> $DIR/trait-alias-objects.rs:18:13 + | +LL | let _: &dyn IteratorAlias = &vec![123].into_iter(); + | ^^^^^^^^^^^^^^^^^ missing associated type `Item` value + +error: aborting due to 2 previous errors + +Some errors occurred: E0038, E0191. +For more information about an error, try `rustc --explain E0038`. diff --git a/src/test/ui/traits/trait-alias-fail1.rs b/src/test/ui/traits/trait-alias-wf.rs similarity index 72% rename from src/test/ui/traits/trait-alias-fail1.rs rename to src/test/ui/traits/trait-alias-wf.rs index 25c850db6ce4..8c8ce1221ba3 100644 --- a/src/test/ui/traits/trait-alias-fail1.rs +++ b/src/test/ui/traits/trait-alias-wf.rs @@ -1,4 +1,4 @@ -// Copyright 2017-2018 The Rust Project Developers. See the COPYRIGHT +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -10,13 +10,8 @@ #![feature(trait_alias)] -trait CloneDefault = Default where T: Clone; -trait BoundedAlias = Default; - trait Foo {} trait A {} trait B = A; // T cannot be unbounded -impl CloneDefault for () {} - fn main() {} diff --git a/src/test/ui/traits/trait-alias-wf.stderr b/src/test/ui/traits/trait-alias-wf.stderr new file mode 100644 index 000000000000..e8c81c87796f --- /dev/null +++ b/src/test/ui/traits/trait-alias-wf.stderr @@ -0,0 +1,16 @@ +error[E0277]: the trait bound `T: Foo` is not satisfied + --> $DIR/trait-alias-wf.rs:15:1 + | +LL | trait B = A; // T cannot be unbounded + | ^^^^^^^^^^^^^^^^^^ the trait `Foo` is not implemented for `T` + | + = help: consider adding a `where T: Foo` bound +note: required by `A` + --> $DIR/trait-alias-wf.rs:14:1 + | +LL | trait A {} + | ^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`.