diff options
| author | Alex Burka <aburka@seas.upenn.edu> | 2017-12-03 12:57:54 -0500 |
|---|---|---|
| committer | Alex Burka <aburka@seas.upenn.edu> | 2017-12-14 12:56:26 -0500 |
| commit | 4029a0198433a4b03dc4b4529164ee4872fc2834 (patch) | |
| tree | 24f1c484e366b1a3162c3daea2e3f774305be436 | |
| parent | 63f1c24d8ac1f920da7564aa59027b2bd5c7d1bd (diff) | |
error on any use of trait alias
| -rw-r--r-- | src/librustc_typeck/collect.rs | 5 | ||||
| -rw-r--r-- | src/librustc_typeck/diagnostics.rs | 1 | ||||
| -rw-r--r-- | src/test/compile-fail/trait-alias.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/trait-alias.rs (renamed from src/test/run-pass/trait-alias.rs) | 12 | ||||
| -rw-r--r-- | src/test/ui/trait-alias.stderr | 38 |
5 files changed, 49 insertions, 9 deletions
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 918146605fd..3d4d8e65f69 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -442,9 +442,8 @@ fn convert_item<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, item_id: ast::NodeId) { tcx.predicates_of(def_id); }, hir::ItemTraitAlias(..) => { - tcx.generics_of(def_id); - tcx.trait_def(def_id); - tcx.predicates_of(def_id); + span_err!(tcx.sess, it.span, E0645, + "trait aliases are not yet implemented (see issue #41517)"); }, hir::ItemStruct(ref struct_def, _) | hir::ItemUnion(ref struct_def, _) => { diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index 328b7f9fdef..770d0cd4f1f 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -4721,4 +4721,5 @@ register_diagnostics! { E0632, // cannot provide explicit type parameters when `impl Trait` is used in // argument position. E0641, // cannot cast to/from a pointer with an unknown kind + E0645, // trait aliases not finished } diff --git a/src/test/compile-fail/trait-alias.rs b/src/test/compile-fail/trait-alias.rs index de87fe39395..5d4112e4a5e 100644 --- a/src/test/compile-fail/trait-alias.rs +++ b/src/test/compile-fail/trait-alias.rs @@ -9,9 +9,11 @@ // except according to those terms. trait Alias1<T> = Default where T: Clone; // ok + //~^ERROR trait aliases are not yet implemented trait Alias2<T: Clone = ()> = Default; //~^ERROR type parameters on the left side of a trait alias cannot be bounded //~^^ERROR type parameters on the left side of a trait alias cannot have defaults + //~^^^ERROR trait aliases are not yet implemented impl Alias1 { //~ERROR expected type, found trait alias fn foo() {} diff --git a/src/test/run-pass/trait-alias.rs b/src/test/ui/trait-alias.rs index 529765320a2..b794bab8470 100644 --- a/src/test/run-pass/trait-alias.rs +++ b/src/test/ui/trait-alias.rs @@ -8,9 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -trait SimpleAlias = Default; -trait GenericAlias<T> = Iterator<Item=T>; -trait Partial<T> = IntoIterator<Item=T>; +trait SimpleAlias = Default; //~ERROR E0645 +trait GenericAlias<T> = Iterator<Item=T>; //~ERROR E0645 +trait Partial<T> = IntoIterator<Item=T>; //~ERROR E0645 trait Things<T> {} trait Romeo {} @@ -19,10 +19,10 @@ struct Fore<T>(T); impl<T, U> Things<T> for The<U> {} impl<T> Romeo for Fore<T> {} -trait WithWhere<Art, Thou> = Romeo + Romeo where Fore<(Art, Thou)>: Romeo; -trait BareWhere<Wild, Are> = where The<Wild>: Things<Are>; +trait WithWhere<Art, Thou> = Romeo + Romeo where Fore<(Art, Thou)>: Romeo; //~ERROR E0645 +trait BareWhere<Wild, Are> = where The<Wild>: Things<Are>; //~ERROR E0645 -trait CD = Clone + Default; +trait CD = Clone + Default; //~ERROR E0645 fn foo<T: CD>() -> (T, T) { let one = T::default(); diff --git a/src/test/ui/trait-alias.stderr b/src/test/ui/trait-alias.stderr new file mode 100644 index 00000000000..4a8de37a393 --- /dev/null +++ b/src/test/ui/trait-alias.stderr @@ -0,0 +1,38 @@ +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:11:1 + | +11 | trait SimpleAlias = Default; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:12:1 + | +12 | trait GenericAlias<T> = Iterator<Item=T>; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:13:1 + | +13 | trait Partial<T> = IntoIterator<Item=T>; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:22:1 + | +22 | trait WithWhere<Art, Thou> = Romeo + Romeo where Fore<(Art, Thou)>: Romeo; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:23:1 + | +23 | trait BareWhere<Wild, Are> = where The<Wild>: Things<Are>; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0645]: trait aliases are not yet implemented (see issue #41517) + --> $DIR/trait-alias.rs:25:1 + | +25 | trait CD = Clone + Default; //~ERROR E0645 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 6 previous errors + |
