summaryrefslogtreecommitdiffstats
path: root/tests/ui/errors/trait-bound-error-spans
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/errors/trait-bound-error-spans')
-rw-r--r--tests/ui/errors/trait-bound-error-spans/blame-trait-error.rs102
-rw-r--r--tests/ui/errors/trait-bound-error-spans/blame-trait-error.stderr402
2 files changed, 504 insertions, 0 deletions
diff --git a/tests/ui/errors/trait-bound-error-spans/blame-trait-error.rs b/tests/ui/errors/trait-bound-error-spans/blame-trait-error.rs
new file mode 100644
index 000000000..0fbd85143
--- /dev/null
+++ b/tests/ui/errors/trait-bound-error-spans/blame-trait-error.rs
@@ -0,0 +1,102 @@
+trait T1 {}
+trait T2 {}
+trait T3 {}
+trait T4 {}
+
+impl<B: T2> T1 for Wrapper<B> {}
+
+impl T2 for i32 {}
+impl T3 for i32 {}
+
+impl<A: T3> T2 for Burrito<A> {}
+
+struct Wrapper<W> {
+ value: W,
+}
+
+struct Burrito<F> {
+ filling: F,
+}
+
+impl<It: Iterator> T1 for Option<It> {}
+
+impl<'a, A: T1> T1 for &'a A {}
+
+fn want<V: T1>(_x: V) {}
+
+enum ExampleTuple<T> {
+ ExampleTupleVariant(T),
+}
+use ExampleDifferentTupleVariantName as ExampleYetAnotherTupleVariantName;
+use ExampleTuple as ExampleOtherTuple;
+use ExampleTuple::ExampleTupleVariant as ExampleDifferentTupleVariantName;
+use ExampleTuple::*;
+
+impl<A> T1 for ExampleTuple<A> where A: T3 {}
+
+enum ExampleStruct<T> {
+ ExampleStructVariant { field: T },
+}
+use ExampleDifferentStructVariantName as ExampleYetAnotherStructVariantName;
+use ExampleStruct as ExampleOtherStruct;
+use ExampleStruct::ExampleStructVariant as ExampleDifferentStructVariantName;
+use ExampleStruct::*;
+
+impl<A> T1 for ExampleStruct<A> where A: T3 {}
+
+struct ExampleActuallyTupleStruct<T>(T, i32);
+use ExampleActuallyTupleStruct as ExampleActuallyTupleStructOther;
+
+impl<A> T1 for ExampleActuallyTupleStruct<A> where A: T3 {}
+
+fn example<Q>(q: Q) {
+ want(Wrapper { value: Burrito { filling: q } });
+ //~^ ERROR the trait bound `Q: T3` is not satisfied [E0277]
+
+ want(Some(()));
+ //~^ ERROR `()` is not an iterator [E0277]
+
+ want(Some(q));
+ //~^ ERROR `Q` is not an iterator [E0277]
+
+ want(&Some(q));
+ //~^ ERROR `Q` is not an iterator [E0277]
+
+ want(&ExampleTuple::ExampleTupleVariant(q));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleTupleVariant(q));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleOtherTuple::ExampleTupleVariant(q));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleDifferentTupleVariantName(q));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleYetAnotherTupleVariantName(q));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleStruct::ExampleStructVariant { field: q });
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleStructVariant { field: q });
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleOtherStruct::ExampleStructVariant { field: q });
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleDifferentStructVariantName { field: q });
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleYetAnotherStructVariantName { field: q });
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleActuallyTupleStruct(q, 0));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+
+ want(&ExampleActuallyTupleStructOther(q, 0));
+ //~^ ERROR `Q: T3` is not satisfied [E0277]
+}
+
+fn main() {}
diff --git a/tests/ui/errors/trait-bound-error-spans/blame-trait-error.stderr b/tests/ui/errors/trait-bound-error-spans/blame-trait-error.stderr
new file mode 100644
index 000000000..9228a047e
--- /dev/null
+++ b/tests/ui/errors/trait-bound-error-spans/blame-trait-error.stderr
@@ -0,0 +1,402 @@
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:53:46
+ |
+LL | want(Wrapper { value: Burrito { filling: q } });
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `Burrito<Q>` to implement `T2`
+ --> $DIR/blame-trait-error.rs:11:13
+ |
+LL | impl<A: T3> T2 for Burrito<A> {}
+ | -- ^^ ^^^^^^^^^^
+ | |
+ | unsatisfied trait bound introduced here
+note: required for `Wrapper<Burrito<Q>>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:6:13
+ |
+LL | impl<B: T2> T1 for Wrapper<B> {}
+ | -- ^^ ^^^^^^^^^^
+ | |
+ | unsatisfied trait bound introduced here
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: `()` is not an iterator
+ --> $DIR/blame-trait-error.rs:56:15
+ |
+LL | want(Some(()));
+ | ---- ^^ `()` is not an iterator
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Iterator` is not implemented for `()`
+ = help: the trait `T1` is implemented for `Option<It>`
+note: required for `Option<()>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:21:20
+ |
+LL | impl<It: Iterator> T1 for Option<It> {}
+ | -------- ^^ ^^^^^^^^^^
+ | |
+ | unsatisfied trait bound introduced here
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+
+error[E0277]: `Q` is not an iterator
+ --> $DIR/blame-trait-error.rs:59:15
+ |
+LL | want(Some(q));
+ | ---- ^ `Q` is not an iterator
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `Option<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:21:20
+ |
+LL | impl<It: Iterator> T1 for Option<It> {}
+ | -------- ^^ ^^^^^^^^^^
+ | |
+ | unsatisfied trait bound introduced here
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: std::iter::Iterator>(q: Q) {
+ | +++++++++++++++++++++
+
+error[E0277]: `Q` is not an iterator
+ --> $DIR/blame-trait-error.rs:62:16
+ |
+LL | want(&Some(q));
+ | ---- ^ `Q` is not an iterator
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `Option<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:21:20
+ |
+LL | impl<It: Iterator> T1 for Option<It> {}
+ | -------- ^^ ^^^^^^^^^^
+ | |
+ | unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&Option<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: std::iter::Iterator>(q: Q) {
+ | +++++++++++++++++++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:65:45
+ |
+LL | want(&ExampleTuple::ExampleTupleVariant(q));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleTuple<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:35:9
+ |
+LL | impl<A> T1 for ExampleTuple<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleTuple<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:68:31
+ |
+LL | want(&ExampleTupleVariant(q));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleTuple<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:35:9
+ |
+LL | impl<A> T1 for ExampleTuple<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleTuple<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:71:50
+ |
+LL | want(&ExampleOtherTuple::ExampleTupleVariant(q));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleTuple<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:35:9
+ |
+LL | impl<A> T1 for ExampleTuple<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleTuple<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:74:44
+ |
+LL | want(&ExampleDifferentTupleVariantName(q));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleTuple<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:35:9
+ |
+LL | impl<A> T1 for ExampleTuple<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleTuple<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:77:45
+ |
+LL | want(&ExampleYetAnotherTupleVariantName(q));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleTuple<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:35:9
+ |
+LL | impl<A> T1 for ExampleTuple<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleTuple<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:80:56
+ |
+LL | want(&ExampleStruct::ExampleStructVariant { field: q });
+ | ---- required by a bound introduced by this call ^ the trait `T3` is not implemented for `Q`
+ |
+note: required for `ExampleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:45:9
+ |
+LL | impl<A> T1 for ExampleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:83:41
+ |
+LL | want(&ExampleStructVariant { field: q });
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:45:9
+ |
+LL | impl<A> T1 for ExampleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:86:61
+ |
+LL | want(&ExampleOtherStruct::ExampleStructVariant { field: q });
+ | ---- required by a bound introduced by this call ^ the trait `T3` is not implemented for `Q`
+ |
+note: required for `ExampleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:45:9
+ |
+LL | impl<A> T1 for ExampleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:89:54
+ |
+LL | want(&ExampleDifferentStructVariantName { field: q });
+ | ---- required by a bound introduced by this call ^ the trait `T3` is not implemented for `Q`
+ |
+note: required for `ExampleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:45:9
+ |
+LL | impl<A> T1 for ExampleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:92:55
+ |
+LL | want(&ExampleYetAnotherStructVariantName { field: q });
+ | ---- required by a bound introduced by this call ^ the trait `T3` is not implemented for `Q`
+ |
+note: required for `ExampleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:45:9
+ |
+LL | impl<A> T1 for ExampleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:95:38
+ |
+LL | want(&ExampleActuallyTupleStruct(q, 0));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleActuallyTupleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:50:9
+ |
+LL | impl<A> T1 for ExampleActuallyTupleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleActuallyTupleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error[E0277]: the trait bound `Q: T3` is not satisfied
+ --> $DIR/blame-trait-error.rs:98:43
+ |
+LL | want(&ExampleActuallyTupleStructOther(q, 0));
+ | ---- ^ the trait `T3` is not implemented for `Q`
+ | |
+ | required by a bound introduced by this call
+ |
+note: required for `ExampleActuallyTupleStruct<Q>` to implement `T1`
+ --> $DIR/blame-trait-error.rs:50:9
+ |
+LL | impl<A> T1 for ExampleActuallyTupleStruct<A> where A: T3 {}
+ | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- unsatisfied trait bound introduced here
+ = note: 1 redundant requirement hidden
+ = note: required for `&ExampleActuallyTupleStruct<Q>` to implement `T1`
+note: required by a bound in `want`
+ --> $DIR/blame-trait-error.rs:25:12
+ |
+LL | fn want<V: T1>(_x: V) {}
+ | ^^ required by this bound in `want`
+help: consider restricting type parameter `Q`
+ |
+LL | fn example<Q: T3>(q: Q) {
+ | ++++
+
+error: aborting due to 16 previous errors
+
+For more information about this error, try `rustc --explain E0277`.