diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-08-26 00:28:23 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-08-31 09:02:35 +0300 |
| commit | 6b8fba5a42840f0e8b2ea087f8fefdb9b93e1b22 (patch) | |
| tree | ae23f099d3ce9c13c73b449b356e64fc8be99ff6 /src/test/ui | |
| parent | 1114ab684fbad001c4e580326d8eb4d8c4e917d3 (diff) | |
| download | rust-6b8fba5a42840f0e8b2ea087f8fefdb9b93e1b22.tar.gz rust-6b8fba5a42840f0e8b2ea087f8fefdb9b93e1b22.zip | |
rustc_typeck: turn `where Type:,` into a WF(Type) predicate, instead of ignoring it.
Diffstat (limited to 'src/test/ui')
| -rw-r--r-- | src/test/ui/chalkify/lower_trait_where_clause.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/chalkify/lower_trait_where_clause.stderr | 3 | ||||
| -rw-r--r-- | src/test/ui/wf/wf-fn-where-clause.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/wf/wf-fn-where-clause.stderr | 27 |
4 files changed, 38 insertions, 7 deletions
diff --git a/src/test/ui/chalkify/lower_trait_where_clause.rs b/src/test/ui/chalkify/lower_trait_where_clause.rs index 57e95e39cd9..5305591b843 100644 --- a/src/test/ui/chalkify/lower_trait_where_clause.rs +++ b/src/test/ui/chalkify/lower_trait_where_clause.rs @@ -14,7 +14,15 @@ use std::fmt::{Debug, Display}; use std::borrow::Borrow; #[rustc_dump_program_clauses] //~ ERROR program clause dump -trait Foo<'a, 'b, S, T, U> where S: Debug, T: Borrow<U>, U: ?Sized, 'a: 'b, U: 'b { +trait Foo<'a, 'b, S, T, U> +where + S: Debug, + T: Borrow<U>, + U: ?Sized, + 'a: 'b, + U: 'b, + Vec<T>:, // NOTE(#53696) this checks an empty list of bounds. +{ fn s(_: S) -> S; fn t(_: T) -> T; fn u(_: U) -> U; diff --git a/src/test/ui/chalkify/lower_trait_where_clause.stderr b/src/test/ui/chalkify/lower_trait_where_clause.stderr index 5ea397d424b..ad3546da1a2 100644 --- a/src/test/ui/chalkify/lower_trait_where_clause.stderr +++ b/src/test/ui/chalkify/lower_trait_where_clause.stderr @@ -11,7 +11,8 @@ LL | #[rustc_dump_program_clauses] //~ ERROR program clause dump = note: Implemented(Self: Foo<'a, 'b, S, T, U>) :- FromEnv(Self: Foo<'a, 'b, S, T, U>). = note: RegionOutlives('a : 'b) :- FromEnv(Self: Foo<'a, 'b, S, T, U>). = note: TypeOutlives(U : 'b) :- FromEnv(Self: Foo<'a, 'b, S, T, U>). - = note: WellFormed(Self: Foo<'a, 'b, S, T, U>) :- Implemented(Self: Foo<'a, 'b, S, T, U>), WellFormed(S: std::marker::Sized), WellFormed(T: std::marker::Sized), WellFormed(S: std::fmt::Debug), WellFormed(T: std::borrow::Borrow<U>), RegionOutlives('a : 'b), TypeOutlives(U : 'b). + = note: WellFormed(Self: Foo<'a, 'b, S, T, U>) :- Implemented(Self: Foo<'a, 'b, S, T, U>), WellFormed(S: std::marker::Sized), WellFormed(T: std::marker::Sized), WellFormed(S: std::fmt::Debug), WellFormed(T: std::borrow::Borrow<U>), RegionOutlives('a : 'b), TypeOutlives(U : 'b), WellFormed(std::vec::Vec<T>). + = note: WellFormed(std::vec::Vec<T>) :- FromEnv(Self: Foo<'a, 'b, S, T, U>). error: aborting due to previous error diff --git a/src/test/ui/wf/wf-fn-where-clause.rs b/src/test/ui/wf/wf-fn-where-clause.rs index 3ed9e5d9f1e..59bb8326ddb 100644 --- a/src/test/ui/wf/wf-fn-where-clause.rs +++ b/src/test/ui/wf/wf-fn-where-clause.rs @@ -10,7 +10,6 @@ // Test that we check where-clauses on fn items. -#![feature(associated_type_defaults)] #![feature(rustc_attrs)] #![allow(dead_code)] @@ -20,5 +19,9 @@ fn foo<T,U>() where T: ExtraCopy<U> //~ ERROR E0277 { } +fn bar() where Vec<dyn Copy>:, {} +//~^ ERROR E0277 +//~| ERROR E0038 + #[rustc_error] fn main() { } diff --git a/src/test/ui/wf/wf-fn-where-clause.stderr b/src/test/ui/wf/wf-fn-where-clause.stderr index 5f0f982577e..21591419ec8 100644 --- a/src/test/ui/wf/wf-fn-where-clause.stderr +++ b/src/test/ui/wf/wf-fn-where-clause.stderr @@ -1,5 +1,5 @@ error[E0277]: the trait bound `U: std::marker::Copy` is not satisfied - --> $DIR/wf-fn-where-clause.rs:19:1 + --> $DIR/wf-fn-where-clause.rs:18:1 | LL | / fn foo<T,U>() where T: ExtraCopy<U> //~ ERROR E0277 LL | | { @@ -8,11 +8,30 @@ LL | | } | = help: consider adding a `where U: std::marker::Copy` bound note: required by `ExtraCopy` - --> $DIR/wf-fn-where-clause.rs:17:1 + --> $DIR/wf-fn-where-clause.rs:16:1 | LL | trait ExtraCopy<T:Copy> { } | ^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error +error[E0277]: the size for values of type `(dyn std::marker::Copy + 'static)` cannot be known at compilation time + --> $DIR/wf-fn-where-clause.rs:22:1 + | +LL | fn bar() where Vec<dyn Copy>:, {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time + | + = help: the trait `std::marker::Sized` is not implemented for `(dyn std::marker::Copy + 'static)` + = note: to learn more, visit <https://doc.rust-lang.org/book/second-edition/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait> + = note: required by `std::vec::Vec` + +error[E0038]: the trait `std::marker::Copy` cannot be made into an object + --> $DIR/wf-fn-where-clause.rs:22:1 + | +LL | fn bar() where Vec<dyn Copy>:, {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Copy` cannot be made into an object + | + = note: the trait cannot require that `Self : Sized` + +error: aborting due to 3 previous errors -For more information about this error, try `rustc --explain E0277`. +Some errors occurred: E0038, E0277. +For more information about an error, try `rustc --explain E0038`. |
