Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 5 pull requests #83979

Closed
wants to merge 15 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Point at impl and type defs introducing requirements on E0277
estebank committed Apr 7, 2021
commit 8bc558197862268f080e5df621e89f519a52950c
2 changes: 1 addition & 1 deletion compiler/rustc_middle/src/ty/mod.rs
Original file line number Diff line number Diff line change
@@ -1598,7 +1598,7 @@ impl<'tcx> TyCtxt<'tcx> {
.filter(|item| item.kind == AssocKind::Fn && item.defaultness.has_value())
}

fn item_name_from_hir(self, def_id: DefId) -> Option<Ident> {
pub fn item_name_from_hir(self, def_id: DefId) -> Option<Ident> {
self.hir().get_if_local(def_id).and_then(|node| node.ident())
}

Original file line number Diff line number Diff line change
@@ -2070,7 +2070,14 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {

// Don't print the tuple of capture types
if !is_upvar_tys_infer_tuple {
err.note(&format!("required because it appears within the type `{}`", ty));
let msg = format!("required because it appears within the type `{}`", ty);
match ty.kind() {
ty::Adt(def, _) => match self.tcx.item_name_from_hir(def.did) {
Some(ident) => err.span_note(ident.span, &msg),
None => err.note(&msg),
},
_ => err.note(&msg),
};
}

obligated_types.push(ty);
@@ -2092,11 +2099,36 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
ObligationCauseCode::ImplDerivedObligation(ref data) => {
let mut parent_trait_ref = self.resolve_vars_if_possible(data.parent_trait_ref);
let parent_def_id = parent_trait_ref.def_id();
err.note(&format!(
let msg = format!(
"required because of the requirements on the impl of `{}` for `{}`",
parent_trait_ref.print_only_trait_path(),
parent_trait_ref.skip_binder().self_ty()
));
);
let mut candidates = vec![];
self.tcx.for_each_relevant_impl(
parent_def_id,
parent_trait_ref.self_ty().skip_binder(),
|impl_def_id| {
candidates.push(impl_def_id);
},
);
match &candidates[..] {
[def_id] => match self.tcx.hir().get_if_local(*def_id) {
Some(Node::Item(hir::Item {
kind: hir::ItemKind::Impl(hir::Impl { of_trait, self_ty, .. }),
..
})) => {
let mut spans = Vec::with_capacity(2);
if let Some(trait_ref) = of_trait {
spans.push(trait_ref.path.span);
}
spans.push(self_ty.span);
err.span_note(spans, &msg)
}
_ => err.note(&msg),
},
_ => err.note(&msg),
};

let mut parent_predicate = parent_trait_ref.without_const().to_predicate(tcx);
let mut data = data;
18 changes: 15 additions & 3 deletions src/test/ui/associated-types/impl-wf-cycle-1.stderr
Original file line number Diff line number Diff line change
@@ -10,7 +10,11 @@ LL | |
LL | | }
| |_^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-1.rs:15:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
= note: 1 redundant requirements hidden
= note: required because of the requirements on the impl of `Grault` for `(T,)`

@@ -20,7 +24,11 @@ error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
LL | type A = ();
| ^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-1.rs:15:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
= note: 1 redundant requirements hidden
= note: required because of the requirements on the impl of `Grault` for `(T,)`

@@ -30,7 +38,11 @@ error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
LL | type B = bool;
| ^^^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-1.rs:15:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
= note: 1 redundant requirements hidden
= note: required because of the requirements on the impl of `Grault` for `(T,)`

12 changes: 10 additions & 2 deletions src/test/ui/associated-types/impl-wf-cycle-2.stderr
Original file line number Diff line number Diff line change
@@ -10,15 +10,23 @@ LL | |
LL | | }
| |_^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-2.rs:7:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^

error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
--> $DIR/impl-wf-cycle-2.rs:11:5
|
LL | type A = ();
| ^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-2.rs:7:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^

error: aborting due to 2 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/associated-types/issue-44153.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn visit() {}
LL | <() as Visit>::visit();
| ^^^^^^^^^^^^^^^^^^^^ expected `&()`, found `()`
|
= note: required because of the requirements on the impl of `Visit` for `()`
note: required because of the requirements on the impl of `Visit` for `()`
--> $DIR/issue-44153.rs:13:10
|
LL | impl<'a> Visit for () where
| ^^^^^ ^^

error: aborting due to previous error

6 changes: 5 additions & 1 deletion src/test/ui/associated-types/issue-65774-1.stderr
Original file line number Diff line number Diff line change
@@ -13,7 +13,11 @@ error[E0277]: the trait bound `T: MyDisplay` is not satisfied
LL | let closure = |config: &mut <S as MPU>::MpuConfig| writer.my_write(&config);
| ^^^^^^^ the trait `MyDisplay` is not implemented for `T`
|
= note: required because of the requirements on the impl of `MyDisplay` for `&mut T`
note: required because of the requirements on the impl of `MyDisplay` for `&mut T`
--> $DIR/issue-65774-1.rs:5:24
|
LL | impl<'a, T: MyDisplay> MyDisplay for &'a mut T { }
| ^^^^^^^^^ ^^^^^^^^^
= note: required for the cast to the object type `dyn MyDisplay`

error: aborting due to 2 previous errors
6 changes: 5 additions & 1 deletion src/test/ui/async-await/issue-72590-type-error-sized.stderr
Original file line number Diff line number Diff line change
@@ -17,7 +17,11 @@ LL | async fn frob(self) {}
| ^^^^ doesn't have a size known at compile-time
|
= help: within `Foo`, the trait `Sized` is not implemented for `str`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/issue-72590-type-error-sized.rs:5:8
|
LL | struct Foo {
| ^^^
= help: unsized fn params are gated as an unstable feature
help: function arguments must have a statically known size, borrowed types always have a known size
|
48 changes: 48 additions & 0 deletions src/test/ui/async-await/pin-needed-to-poll-2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use std::{
future::Future,
pin::Pin,
marker::Unpin,
task::{Context, Poll},
};

struct Sleep(std::marker::PhantomPinned);

impl Future for Sleep {
type Output = ();

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
Poll::Ready(())
}
}

impl Drop for Sleep {
fn drop(&mut self) {}
}

fn sleep() -> Sleep {
Sleep(std::marker::PhantomPinned)
}


struct MyFuture {
sleep: Sleep,
}

impl MyFuture {
fn new() -> Self {
Self {
sleep: sleep(),
}
}
}

impl Future for MyFuture {
type Output = ();

fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
Pin::new(&mut self.sleep).poll(cx)
//~^ ERROR `PhantomPinned` cannot be unpinned
}
}

fn main() {}
16 changes: 16 additions & 0 deletions src/test/ui/async-await/pin-needed-to-poll-2.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
error[E0277]: `PhantomPinned` cannot be unpinned
--> $DIR/pin-needed-to-poll-2.rs:43:9
|
LL | Pin::new(&mut self.sleep).poll(cx)
| ^^^^^^^^ within `Sleep`, the trait `Unpin` is not implemented for `PhantomPinned`
|
note: required because it appears within the type `Sleep`
--> $DIR/pin-needed-to-poll-2.rs:8:8
|
LL | struct Sleep(std::marker::PhantomPinned);
| ^^^^^
= note: required by `Pin::<P>::new`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
6 changes: 5 additions & 1 deletion src/test/ui/block-result/issue-22645.stderr
Original file line number Diff line number Diff line change
@@ -6,7 +6,11 @@ LL | b + 3
|
= help: the following implementations were found:
<f64 as Scalar>
= note: required because of the requirements on the impl of `Add<{integer}>` for `Bob`
note: required because of the requirements on the impl of `Add<{integer}>` for `Bob`
--> $DIR/issue-22645.rs:8:19
|
LL | impl<RHS: Scalar> Add <RHS> for Bob {
| ^^^^^^^^^ ^^^

error[E0308]: mismatched types
--> $DIR/issue-22645.rs:15:3
Original file line number Diff line number Diff line change
@@ -9,7 +9,11 @@ LL | impl <T:Sync+'static> RequiresRequiresShareAndSend for X<T> { }
LL | pub trait RequiresRequiresShareAndSend : RequiresShare + Send { }
| ---- required by this bound in `RequiresRequiresShareAndSend`
|
= note: required because it appears within the type `X<T>`
note: required because it appears within the type `X<T>`
--> $DIR/builtin-superkinds-in-metadata.rs:9:8
|
LL | struct X<T>(T);
| ^
help: consider further restricting this bound
|
LL | impl <T:Sync+'static + std::marker::Send> RequiresRequiresShareAndSend for X<T> { }
60 changes: 50 additions & 10 deletions src/test/ui/did_you_mean/recursion_limit.stderr
Original file line number Diff line number Diff line change
@@ -8,16 +8,56 @@ LL | is_send::<A>();
| ^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="20"]` attribute to your crate (`recursion_limit`)
= note: required because it appears within the type `J`
= note: required because it appears within the type `I`
= note: required because it appears within the type `H`
= note: required because it appears within the type `G`
= note: required because it appears within the type `F`
= note: required because it appears within the type `E`
= note: required because it appears within the type `D`
= note: required because it appears within the type `C`
= note: required because it appears within the type `B`
= note: required because it appears within the type `A`
note: required because it appears within the type `J`
--> $DIR/recursion_limit.rs:24:9
|
LL | link! { J, K }
| ^
note: required because it appears within the type `I`
--> $DIR/recursion_limit.rs:23:9
|
LL | link! { I, J }
| ^
note: required because it appears within the type `H`
--> $DIR/recursion_limit.rs:22:9
|
LL | link! { H, I }
| ^
note: required because it appears within the type `G`
--> $DIR/recursion_limit.rs:21:9
|
LL | link! { G, H }
| ^
note: required because it appears within the type `F`
--> $DIR/recursion_limit.rs:20:9
|
LL | link! { F, G }
| ^
note: required because it appears within the type `E`
--> $DIR/recursion_limit.rs:19:9
|
LL | link! { E, F }
| ^
note: required because it appears within the type `D`
--> $DIR/recursion_limit.rs:18:9
|
LL | link! { D, E }
| ^
note: required because it appears within the type `C`
--> $DIR/recursion_limit.rs:17:9
|
LL | link! { C, D }
| ^
note: required because it appears within the type `B`
--> $DIR/recursion_limit.rs:16:9
|
LL | link! { B, C }
| ^
note: required because it appears within the type `A`
--> $DIR/recursion_limit.rs:15:9
|
LL | link! { A, B }
| ^

error: aborting due to previous error

12 changes: 10 additions & 2 deletions src/test/ui/dst/dst-bad-deep.stderr
Original file line number Diff line number Diff line change
@@ -5,8 +5,16 @@ LL | let h: &Fat<Fat<[isize]>> = &Fat { ptr: *g };
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Fat<Fat<[isize]>>`, the trait `Sized` is not implemented for `[isize]`
= note: required because it appears within the type `Fat<[isize]>`
= note: required because it appears within the type `Fat<Fat<[isize]>>`
note: required because it appears within the type `Fat<[isize]>`
--> $DIR/dst-bad-deep.rs:6:8
|
LL | struct Fat<T: ?Sized> {
| ^^^
note: required because it appears within the type `Fat<Fat<[isize]>>`
--> $DIR/dst-bad-deep.rs:6:8
|
LL | struct Fat<T: ?Sized> {
| ^^^
= note: structs must have a statically known size to be initialized

error: aborting due to previous error
6 changes: 5 additions & 1 deletion src/test/ui/error-codes/E0275.stderr
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@ LL | impl<T> Foo for T where Bar<T>: Foo {}
| ^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`E0275`)
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
--> $DIR/E0275.rs:5:9
|
LL | impl<T> Foo for T where Bar<T>: Foo {}
| ^^^ ^
= note: 127 redundant requirements hidden
= note: required because of the requirements on the impl of `Foo` for `Bar<T>`

18 changes: 15 additions & 3 deletions src/test/ui/error-codes/E0277-2.stderr
Original file line number Diff line number Diff line change
@@ -8,9 +8,21 @@ LL | is_send::<Foo>();
| ^^^^^^^^^^^^^^ `*const u8` cannot be sent between threads safely
|
= help: within `Foo`, the trait `Send` is not implemented for `*const u8`
= note: required because it appears within the type `Baz`
= note: required because it appears within the type `Bar`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Baz`
--> $DIR/E0277-2.rs:9:8
|
LL | struct Baz {
| ^^^
note: required because it appears within the type `Bar`
--> $DIR/E0277-2.rs:5:8
|
LL | struct Bar {
| ^^^
note: required because it appears within the type `Foo`
--> $DIR/E0277-2.rs:1:8
|
LL | struct Foo {
| ^^^

error: aborting due to previous error

24 changes: 20 additions & 4 deletions src/test/ui/extern/extern-types-unsized.stderr
Original file line number Diff line number Diff line change
@@ -23,7 +23,11 @@ LL | assert_sized::<Foo>();
| ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Foo`, the trait `Sized` is not implemented for `A`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/extern-types-unsized.rs:9:8
|
LL | struct Foo {
| ^^^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn assert_sized<T: ?Sized>() {}
@@ -39,7 +43,11 @@ LL | assert_sized::<Bar<A>>();
| ^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Bar<A>`, the trait `Sized` is not implemented for `A`
= note: required because it appears within the type `Bar<A>`
note: required because it appears within the type `Bar<A>`
--> $DIR/extern-types-unsized.rs:14:8
|
LL | struct Bar<T: ?Sized> {
| ^^^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn assert_sized<T: ?Sized>() {}
@@ -55,8 +63,16 @@ LL | assert_sized::<Bar<Bar<A>>>();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Bar<Bar<A>>`, the trait `Sized` is not implemented for `A`
= note: required because it appears within the type `Bar<A>`
= note: required because it appears within the type `Bar<Bar<A>>`
note: required because it appears within the type `Bar<A>`
--> $DIR/extern-types-unsized.rs:14:8
|
LL | struct Bar<T: ?Sized> {
| ^^^
note: required because it appears within the type `Bar<Bar<A>>`
--> $DIR/extern-types-unsized.rs:14:8
|
LL | struct Bar<T: ?Sized> {
| ^^^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn assert_sized<T: ?Sized>() {}
6 changes: 5 additions & 1 deletion src/test/ui/feature-gates/feature-gate-trivial_bounds.stderr
Original file line number Diff line number Diff line change
@@ -107,7 +107,11 @@ LL | | }
| |_^ doesn't have a size known at compile-time
|
= help: within `Dst<(dyn A + 'static)>`, the trait `Sized` is not implemented for `(dyn A + 'static)`
= note: required because it appears within the type `Dst<(dyn A + 'static)>`
note: required because it appears within the type `Dst<(dyn A + 'static)>`
--> $DIR/feature-gate-trivial_bounds.rs:48:8
|
LL | struct Dst<X: ?Sized> {
| ^^^
= help: see issue #48214
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable

6 changes: 5 additions & 1 deletion src/test/ui/hrtb/issue-62203-hrtb-ice.stderr
Original file line number Diff line number Diff line change
@@ -15,7 +15,11 @@ error[E0271]: type mismatch resolving `<[closure@$DIR/issue-62203-hrtb-ice.rs:42
LL | let v = Unit2.m(
| ^ expected struct `Unit4`, found struct `Unit3`
|
= note: required because of the requirements on the impl of `for<'r> T0<'r, (<Unit2 as Ty<'r>>::V,)>` for `L<[closure@$DIR/issue-62203-hrtb-ice.rs:42:17: 42:39]>`
note: required because of the requirements on the impl of `for<'r> T0<'r, (<Unit2 as Ty<'r>>::V,)>` for `L<[closure@$DIR/issue-62203-hrtb-ice.rs:42:17: 42:39]>`
--> $DIR/issue-62203-hrtb-ice.rs:17:16
|
LL | impl<'a, A, T> T0<'a, A> for L<T>
| ^^^^^^^^^ ^^^^

error: aborting due to 2 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-18400.stderr
Original file line number Diff line number Diff line change
@@ -5,7 +5,11 @@ LL | 0.contains(bits);
| ^^^^^^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`issue_18400`)
= note: required because of the requirements on the impl of `Set<&[_]>` for `{integer}`
note: required because of the requirements on the impl of `Set<&[_]>` for `{integer}`
--> $DIR/issue-18400.rs:6:16
|
LL | impl<'a, T, S> Set<&'a [T]> for S where
| ^^^^^^^^^^^^ ^
= note: 128 redundant requirements hidden
= note: required because of the requirements on the impl of `Set<&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[_]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]>` for `{integer}`

60 changes: 50 additions & 10 deletions src/test/ui/issues/issue-20413.stderr

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-22872.stderr
Original file line number Diff line number Diff line change
@@ -5,7 +5,11 @@ LL | let _: Box<dyn for<'b> Wrap<'b>> = Box::new(Wrapper(process));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ `<P as Process<'_>>::Item` is not an iterator
|
= help: the trait `Iterator` is not implemented for `<P as Process<'_>>::Item`
= note: required because of the requirements on the impl of `for<'b> Wrap<'b>` for `Wrapper<P>`
note: required because of the requirements on the impl of `for<'b> Wrap<'b>` for `Wrapper<P>`
--> $DIR/issue-22872.rs:7:13
|
LL | impl<'b, P> Wrap<'b> for Wrapper<P>
| ^^^^^^^^ ^^^^^^^^^^
= note: required for the cast to the object type `dyn for<'b> Wrap<'b>`
help: consider further restricting the associated type
|
6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-23122-2.stderr
Original file line number Diff line number Diff line change
@@ -5,7 +5,11 @@ LL | type Next = <GetNext<T::Next> as Next>::Next;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`issue_23122_2`)
= note: required because of the requirements on the impl of `Next` for `GetNext<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<T as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next>`
note: required because of the requirements on the impl of `Next` for `GetNext<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<T as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next>`
--> $DIR/issue-23122-2.rs:8:15
|
LL | impl<T: Next> Next for GetNext<T> {
| ^^^^ ^^^^^^^^^^

error: aborting due to previous error

6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-38821.stderr
Original file line number Diff line number Diff line change
@@ -4,7 +4,11 @@ error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not sat
LL | #[derive(Debug, Copy, Clone)]
| ^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
= note: required because of the requirements on the impl of `IntoNullable` for `<Col as Expression>::SqlType`
note: required because of the requirements on the impl of `IntoNullable` for `<Col as Expression>::SqlType`
--> $DIR/issue-38821.rs:9:18
|
LL | impl<T: NotNull> IntoNullable for T {
| ^^^^^^^^^^^^ ^
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to previous error
6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-39970.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn visit() {}
LL | <() as Visit>::visit();
| ^^^^^^^^^^^^^^^^^^^^ expected `()`, found `&()`
|
= note: required because of the requirements on the impl of `Visit` for `()`
note: required because of the requirements on the impl of `Visit` for `()`
--> $DIR/issue-39970.rs:13:6
|
LL | impl Visit for () where
| ^^^^^ ^^

error: aborting due to previous error

24 changes: 20 additions & 4 deletions src/test/ui/issues/issue-40827.stderr
Original file line number Diff line number Diff line change
@@ -8,9 +8,17 @@ LL | f(Foo(Arc::new(Bar::B(None))));
| ^ `Rc<Foo>` cannot be shared between threads safely
|
= help: within `Bar`, the trait `Sync` is not implemented for `Rc<Foo>`
= note: required because it appears within the type `Bar`
note: required because it appears within the type `Bar`
--> $DIR/issue-40827.rs:6:6
|
LL | enum Bar {
| ^^^
= note: required because of the requirements on the impl of `Send` for `Arc<Bar>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/issue-40827.rs:4:8
|
LL | struct Foo(Arc<Bar>);
| ^^^

error[E0277]: `Rc<Foo>` cannot be sent between threads safely
--> $DIR/issue-40827.rs:14:5
@@ -22,9 +30,17 @@ LL | f(Foo(Arc::new(Bar::B(None))));
| ^ `Rc<Foo>` cannot be sent between threads safely
|
= help: within `Bar`, the trait `Send` is not implemented for `Rc<Foo>`
= note: required because it appears within the type `Bar`
note: required because it appears within the type `Bar`
--> $DIR/issue-40827.rs:6:6
|
LL | enum Bar {
| ^^^
= note: required because of the requirements on the impl of `Send` for `Arc<Bar>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/issue-40827.rs:4:8
|
LL | struct Foo(Arc<Bar>);
| ^^^

error: aborting due to 2 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-5883.stderr
Original file line number Diff line number Diff line change
@@ -21,7 +21,11 @@ LL | Struct { r: r }
| --------------- this returned value is of type `Struct`
|
= help: within `Struct`, the trait `Sized` is not implemented for `(dyn A + 'static)`
= note: required because it appears within the type `Struct`
note: required because it appears within the type `Struct`
--> $DIR/issue-5883.rs:3:8
|
LL | struct Struct {
| ^^^^^^
= note: the return type of a function must have a statically known size

error: aborting due to 2 previous errors
6 changes: 5 additions & 1 deletion src/test/ui/issues/issue-7013.stderr
Original file line number Diff line number Diff line change
@@ -6,7 +6,11 @@ LL | let a = A {v: box B{v: None} as Box<dyn Foo + Send>};
|
= help: within `B`, the trait `Send` is not implemented for `Rc<RefCell<A>>`
= note: required because it appears within the type `Option<Rc<RefCell<A>>>`
= note: required because it appears within the type `B`
note: required because it appears within the type `B`
--> $DIR/issue-7013.rs:10:8
|
LL | struct B {
| ^
= note: required for the cast to the object type `dyn Foo + Send`

error: aborting due to previous error
6 changes: 5 additions & 1 deletion src/test/ui/kindck/kindck-impl-type-params-2.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn take_param<T:Foo>(foo: &T) { }
LL | take_param(&x);
| ^^ the trait `Copy` is not implemented for `Box<{integer}>`
|
= note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
--> $DIR/kindck-impl-type-params-2.rs:6:14
|
LL | impl<T:Copy> Foo for T {
| ^^^ ^

error: aborting due to previous error

36 changes: 30 additions & 6 deletions src/test/ui/kindck/kindck-impl-type-params.stderr
Original file line number Diff line number Diff line change
@@ -4,7 +4,11 @@ error[E0277]: `T` cannot be sent between threads safely
LL | let a = &t as &dyn Gettable<T>;
| ^^ `T` cannot be sent between threads safely
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
@@ -17,7 +21,11 @@ error[E0277]: the trait bound `T: Copy` is not satisfied
LL | let a = &t as &dyn Gettable<T>;
| ^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
@@ -30,7 +38,11 @@ error[E0277]: `T` cannot be sent between threads safely
LL | let a: &dyn Gettable<T> = &t;
| ^^ `T` cannot be sent between threads safely
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
@@ -43,7 +55,11 @@ error[E0277]: the trait bound `T: Copy` is not satisfied
LL | let a: &dyn Gettable<T> = &t;
| ^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
@@ -64,7 +80,11 @@ error[E0277]: the trait bound `String: Copy` is not satisfied
LL | let a = t as Box<dyn Gettable<String>>;
| ^ the trait `Copy` is not implemented for `String`
|
= note: required because of the requirements on the impl of `Gettable<String>` for `S<String>`
note: required because of the requirements on the impl of `Gettable<String>` for `S<String>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<String>`

error[E0277]: the trait bound `Foo: Copy` is not satisfied
@@ -73,7 +93,11 @@ error[E0277]: the trait bound `Foo: Copy` is not satisfied
LL | let a: Box<dyn Gettable<Foo>> = t;
| ^ the trait `Copy` is not implemented for `Foo`
|
= note: required because of the requirements on the impl of `Gettable<Foo>` for `S<Foo>`
note: required because of the requirements on the impl of `Gettable<Foo>` for `S<Foo>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<Foo>`

error: aborting due to 7 previous errors
6 changes: 5 additions & 1 deletion src/test/ui/kindck/kindck-inherited-copy-bound.curr.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn take_param<T:Foo>(foo: &T) { }
LL | take_param(&x);
| ^^ the trait `Copy` is not implemented for `Box<{integer}>`
|
= note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
--> $DIR/kindck-inherited-copy-bound.rs:14:14
|
LL | impl<T:Copy> Foo for T {
| ^^^ ^

error[E0038]: the trait `Foo` cannot be made into an object
--> $DIR/kindck-inherited-copy-bound.rs:28:19
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn take_param<T:Foo>(foo: &T) { }
LL | take_param(&x);
| ^^ the trait `Copy` is not implemented for `Box<{integer}>`
|
= note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
--> $DIR/kindck-inherited-copy-bound.rs:14:14
|
LL | impl<T:Copy> Foo for T {
| ^^^ ^

error[E0038]: the trait `Foo` cannot be made into an object
--> $DIR/kindck-inherited-copy-bound.rs:28:13
6 changes: 5 additions & 1 deletion src/test/ui/mut/mutable-enum-indirect.stderr
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@ LL | bar(&x);
| ^^^ `NoSync` cannot be shared between threads safely
|
= help: within `&Foo`, the trait `Sync` is not implemented for `NoSync`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/mutable-enum-indirect.rs:11:6
|
LL | enum Foo { A(NoSync) }
| ^^^
= note: required because it appears within the type `&Foo`

error: aborting due to previous error
12 changes: 10 additions & 2 deletions src/test/ui/no-send-res-ports.stderr
Original file line number Diff line number Diff line change
@@ -17,8 +17,16 @@ LL | F: Send + 'static,
| ---- required by this bound in `spawn`
|
= help: within `[closure@$DIR/no-send-res-ports.rs:25:19: 29:6]`, the trait `Send` is not implemented for `Rc<()>`
= note: required because it appears within the type `Port<()>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Port<()>`
--> $DIR/no-send-res-ports.rs:5:8
|
LL | struct Port<T>(Rc<T>);
| ^^^^
note: required because it appears within the type `Foo`
--> $DIR/no-send-res-ports.rs:9:12
|
LL | struct Foo {
| ^^^
= note: required because it appears within the type `[closure@$DIR/no-send-res-ports.rs:25:19: 29:6]`

error: aborting due to previous error
6 changes: 5 additions & 1 deletion src/test/ui/no_send-enum.stderr
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@ LL | bar(x);
| ^^^ `NoSend` cannot be sent between threads safely
|
= help: within `Foo`, the trait `Send` is not implemented for `NoSend`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/no_send-enum.rs:8:6
|
LL | enum Foo {
| ^^^

error: aborting due to previous error

6 changes: 5 additions & 1 deletion src/test/ui/no_share-enum.stderr
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@ LL | bar(x);
| ^^^ `NoSync` cannot be shared between threads safely
|
= help: within `Foo`, the trait `Sync` is not implemented for `NoSync`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/no_share-enum.rs:8:6
|
LL | enum Foo { A(NoSync) }
| ^^^

error: aborting due to previous error

30 changes: 25 additions & 5 deletions src/test/ui/phantom-auto-trait.stderr
Original file line number Diff line number Diff line change
@@ -7,9 +7,17 @@ LL | fn is_zen<T: Zen>(_: T) {}
LL | is_zen(x)
| ^ `T` cannot be shared between threads safely
|
= note: required because of the requirements on the impl of `Zen` for `&T`
note: required because of the requirements on the impl of `Zen` for `&T`
--> $DIR/phantom-auto-trait.rs:10:24
|
LL | unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {}
| ^^^ ^^^^^
= note: required because it appears within the type `PhantomData<&T>`
= note: required because it appears within the type `Guard<'_, T>`
note: required because it appears within the type `Guard<'_, T>`
--> $DIR/phantom-auto-trait.rs:12:8
|
LL | struct Guard<'a, T: 'a> {
| ^^^^^
help: consider restricting type parameter `T`
|
LL | fn not_sync<T: std::marker::Sync>(x: Guard<T>) {
@@ -24,10 +32,22 @@ LL | fn is_zen<T: Zen>(_: T) {}
LL | is_zen(x)
| ^ `T` cannot be shared between threads safely
|
= note: required because of the requirements on the impl of `Zen` for `&T`
note: required because of the requirements on the impl of `Zen` for `&T`
--> $DIR/phantom-auto-trait.rs:10:24
|
LL | unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {}
| ^^^ ^^^^^
= note: required because it appears within the type `PhantomData<&T>`
= note: required because it appears within the type `Guard<'_, T>`
= note: required because it appears within the type `Nested<Guard<'_, T>>`
note: required because it appears within the type `Guard<'_, T>`
--> $DIR/phantom-auto-trait.rs:12:8
|
LL | struct Guard<'a, T: 'a> {
| ^^^^^
note: required because it appears within the type `Nested<Guard<'_, T>>`
--> $DIR/phantom-auto-trait.rs:16:8
|
LL | struct Nested<T>(T);
| ^^^^^^
help: consider restricting type parameter `T`
|
LL | fn nested_not_sync<T: std::marker::Sync>(x: Nested<Guard<T>>) {
18 changes: 15 additions & 3 deletions src/test/ui/recursion/recursive-requirements.stderr
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@ LL | let _: AssertSync<Foo> = unimplemented!();
| ^^^^^^^^^^^^^^^ `*const Bar` cannot be shared between threads safely
|
= help: within `Foo`, the trait `Sync` is not implemented for `*const Bar`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/recursive-requirements.rs:5:12
|
LL | pub struct Foo {
| ^^^

error[E0277]: `*const Foo` cannot be shared between threads safely
--> $DIR/recursive-requirements.rs:16:12
@@ -20,9 +24,17 @@ LL | let _: AssertSync<Foo> = unimplemented!();
| ^^^^^^^^^^^^^^^ `*const Foo` cannot be shared between threads safely
|
= help: within `Foo`, the trait `Sync` is not implemented for `*const Foo`
= note: required because it appears within the type `Bar`
note: required because it appears within the type `Bar`
--> $DIR/recursive-requirements.rs:10:12
|
LL | pub struct Bar {
| ^^^
= note: required because it appears within the type `PhantomData<Bar>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/recursive-requirements.rs:5:12
|
LL | pub struct Foo {
| ^^^

error: aborting due to 2 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/specialization/issue-38091-2.stderr
Original file line number Diff line number Diff line change
@@ -10,7 +10,11 @@ LL | #![feature(specialization)]

error[E0275]: overflow evaluating the requirement `i32: Check`
|
= note: required because of the requirements on the impl of `Iterate` for `i32`
note: required because of the requirements on the impl of `Iterate` for `i32`
--> $DIR/issue-38091-2.rs:11:13
|
LL | impl<'a, T> Iterate<'a> for T
| ^^^^^^^^^^^ ^

error: aborting due to previous error; 1 warning emitted

12 changes: 10 additions & 2 deletions src/test/ui/specialization/issue-39448.stderr
Original file line number Diff line number Diff line change
@@ -14,8 +14,16 @@ error[E0275]: overflow evaluating the requirement `T: FromA<U>`
LL | x.foo(y.to()).to()
| ^^
|
= note: required because of the requirements on the impl of `FromA<U>` for `T`
= note: required because of the requirements on the impl of `ToA<T>` for `U`
note: required because of the requirements on the impl of `FromA<U>` for `T`
--> $DIR/issue-39448.rs:24:29
|
LL | impl<T: A, U: A + FromA<T>> FromA<T> for U {
| ^^^^^^^^ ^
note: required because of the requirements on the impl of `ToA<T>` for `U`
--> $DIR/issue-39448.rs:34:12
|
LL | impl<T, U> ToA<U> for T
| ^^^^^^ ^

error: aborting due to previous error; 1 warning emitted

6 changes: 5 additions & 1 deletion src/test/ui/substs-ppaux.normal.stderr
Original file line number Diff line number Diff line change
@@ -80,7 +80,11 @@ LL | <str as Foo<u8>>::bar;
| ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `str`
= note: required because of the requirements on the impl of `Foo<'_, '_, u8>` for `str`
note: required because of the requirements on the impl of `Foo<'_, '_, u8>` for `str`
--> $DIR/substs-ppaux.rs:11:17
|
LL | impl<'a,'b,T,S> Foo<'a, 'b, S> for T {}
| ^^^^^^^^^^^^^^ ^

error: aborting due to 5 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/substs-ppaux.verbose.stderr
Original file line number Diff line number Diff line change
@@ -80,7 +80,11 @@ LL | <str as Foo<u8>>::bar;
| ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `str`
= note: required because of the requirements on the impl of `Foo<'_#0r, '_#1r, u8>` for `str`
note: required because of the requirements on the impl of `Foo<'_#0r, '_#1r, u8>` for `str`
--> $DIR/substs-ppaux.rs:11:17
|
LL | impl<'a,'b,T,S> Foo<'a, 'b, S> for T {}
| ^^^^^^^^^^^^^^ ^

error: aborting due to 5 previous errors

18 changes: 15 additions & 3 deletions src/test/ui/traits/cycle-cache-err-60010.stderr
Original file line number Diff line number Diff line change
@@ -10,9 +10,21 @@ LL | SourceDatabase::parse(db);
= note: required because it appears within the type `*const SalsaStorage`
= note: required because it appears within the type `Unique<SalsaStorage>`
= note: required because it appears within the type `Box<SalsaStorage>`
= note: required because it appears within the type `Runtime<RootDatabase>`
= note: required because it appears within the type `RootDatabase`
= note: required because of the requirements on the impl of `SourceDatabase` for `RootDatabase`
note: required because it appears within the type `Runtime<RootDatabase>`
--> $DIR/cycle-cache-err-60010.rs:23:8
|
LL | struct Runtime<DB: Database> {
| ^^^^^^^
note: required because it appears within the type `RootDatabase`
--> $DIR/cycle-cache-err-60010.rs:20:8
|
LL | struct RootDatabase {
| ^^^^^^^^^^^^
note: required because of the requirements on the impl of `SourceDatabase` for `RootDatabase`
--> $DIR/cycle-cache-err-60010.rs:43:9
|
LL | impl<T> SourceDatabase for T
| ^^^^^^^^^^^^^^ ^

error: aborting due to previous error

3 changes: 1 addition & 2 deletions src/test/ui/traits/inductive-overflow/lifetime.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ struct C<'a>(&'a ());
struct X<T: Y>(T::P);

impl<T: NotAuto> NotAuto for Box<T> {}
impl<T: Y> NotAuto for X<T> where T::P: NotAuto {}
impl<T: Y> NotAuto for X<T> where T::P: NotAuto {} //~ NOTE: required
impl<'a> NotAuto for C<'a> {}

fn is_send<S: NotAuto>() {}
@@ -26,5 +26,4 @@ fn main() {
// Should only be a few notes.
is_send::<X<C<'static>>>();
//~^ ERROR overflow evaluating
//~| NOTE: required
}
6 changes: 5 additions & 1 deletion src/test/ui/traits/inductive-overflow/lifetime.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn is_send<S: NotAuto>() {}
LL | is_send::<X<C<'static>>>();
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `NotAuto` for `X<C<'static>>`
note: required because of the requirements on the impl of `NotAuto` for `X<C<'static>>`
--> $DIR/lifetime.rs:19:12
|
LL | impl<T: Y> NotAuto for X<T> where T::P: NotAuto {}
| ^^^^^^^ ^^^^

error: aborting due to previous error

6 changes: 5 additions & 1 deletion src/test/ui/traits/inductive-overflow/simultaneous.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn is_ee<T: Combo>(t: T) {
LL | is_ee(4);
| ^^^^^
|
= note: required because of the requirements on the impl of `Combo` for `{integer}`
note: required because of the requirements on the impl of `Combo` for `{integer}`
--> $DIR/simultaneous.rs:11:34
|
LL | impl<T: Tweedledee + Tweedledum> Combo for T {}
| ^^^^^ ^

error: aborting due to previous error

6 changes: 5 additions & 1 deletion src/test/ui/traits/inductive-overflow/supertrait.stderr
Original file line number Diff line number Diff line change
@@ -7,7 +7,11 @@ LL | fn copy<T: Magic>(x: T) -> (T, T) { (x, x) }
LL | let (a, b) = copy(NoClone);
| ^^^^
|
= note: required because of the requirements on the impl of `Magic` for `NoClone`
note: required because of the requirements on the impl of `Magic` for `NoClone`
--> $DIR/supertrait.rs:5:16
|
LL | impl<T: Magic> Magic for T {}
| ^^^^^ ^

error: aborting due to previous error

12 changes: 10 additions & 2 deletions src/test/ui/traits/negative-impls/negated-auto-traits-error.stderr
Original file line number Diff line number Diff line change
@@ -69,7 +69,11 @@ LL | is_send(Box::new(Outer2(TestType)));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ `dummy3::TestType` cannot be sent between threads safely
|
= help: within `Outer2<dummy3::TestType>`, the trait `Send` is not implemented for `dummy3::TestType`
= note: required because it appears within the type `Outer2<dummy3::TestType>`
note: required because it appears within the type `Outer2<dummy3::TestType>`
--> $DIR/negated-auto-traits-error.rs:12:8
|
LL | struct Outer2<T>(T);
| ^^^^^^
= note: required because of the requirements on the impl of `Send` for `Unique<Outer2<dummy3::TestType>>`
= note: required because it appears within the type `Box<Outer2<dummy3::TestType>>`

@@ -86,7 +90,11 @@ LL | is_sync(Outer2(TestType));
| help: consider borrowing here: `&Outer2(TestType)`
|
= note: the trait bound `main::TestType: Sync` is not satisfied
= note: required because of the requirements on the impl of `Sync` for `Outer2<main::TestType>`
note: required because of the requirements on the impl of `Sync` for `Outer2<main::TestType>`
--> $DIR/negated-auto-traits-error.rs:14:22
|
LL | unsafe impl<T: Send> Sync for Outer2<T> {}
| ^^^^ ^^^^^^^^^

error: aborting due to 7 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/traits/suggest-where-clause.stderr
Original file line number Diff line number Diff line change
@@ -26,7 +26,11 @@ LL | mem::size_of::<Misc<U>>();
LL | pub const fn size_of<T>() -> usize {
| - required by this bound in `std::mem::size_of`
|
= note: required because it appears within the type `Misc<U>`
note: required because it appears within the type `Misc<U>`
--> $DIR/suggest-where-clause.rs:3:8
|
LL | struct Misc<T:?Sized>(T);
| ^^^^

error[E0277]: the trait bound `u64: From<T>` is not satisfied
--> $DIR/suggest-where-clause.rs:15:5
12 changes: 10 additions & 2 deletions src/test/ui/typeck/typeck-default-trait-impl-negation-sync.stderr
Original file line number Diff line number Diff line change
@@ -19,7 +19,11 @@ LL | is_sync::<MyTypeWUnsafe>();
| ^^^^^^^^^^^^^^^^^^^^^^^^ `UnsafeCell<u8>` cannot be shared between threads safely
|
= help: within `MyTypeWUnsafe`, the trait `Sync` is not implemented for `UnsafeCell<u8>`
= note: required because it appears within the type `MyTypeWUnsafe`
note: required because it appears within the type `MyTypeWUnsafe`
--> $DIR/typeck-default-trait-impl-negation-sync.rs:21:8
|
LL | struct MyTypeWUnsafe {
| ^^^^^^^^^^^^^

error[E0277]: `Managed` cannot be shared between threads safely
--> $DIR/typeck-default-trait-impl-negation-sync.rs:39:5
@@ -31,7 +35,11 @@ LL | is_sync::<MyTypeManaged>();
| ^^^^^^^^^^^^^^^^^^^^^^^^ `Managed` cannot be shared between threads safely
|
= help: within `MyTypeManaged`, the trait `Sync` is not implemented for `Managed`
= note: required because it appears within the type `MyTypeManaged`
note: required because it appears within the type `MyTypeManaged`
--> $DIR/typeck-default-trait-impl-negation-sync.rs:25:8
|
LL | struct MyTypeManaged {
| ^^^^^^^^^^^^^

error: aborting due to 3 previous errors

6 changes: 5 additions & 1 deletion src/test/ui/typeck/typeck-unsafe-always-share.stderr
Original file line number Diff line number Diff line change
@@ -30,7 +30,11 @@ LL | test(ms);
| ^^^^ `UnsafeCell<NoSync>` cannot be shared between threads safely
|
= help: within `MySync<NoSync>`, the trait `Sync` is not implemented for `UnsafeCell<NoSync>`
= note: required because it appears within the type `MySync<NoSync>`
note: required because it appears within the type `MySync<NoSync>`
--> $DIR/typeck-unsafe-always-share.rs:8:8
|
LL | struct MySync<T> {
| ^^^^^^

error[E0277]: `NoSync` cannot be shared between threads safely
--> $DIR/typeck-unsafe-always-share.rs:30:10
6 changes: 5 additions & 1 deletion src/test/ui/unsized-locals/issue-50940-with-feature.stderr
Original file line number Diff line number Diff line change
@@ -14,7 +14,11 @@ LL | A as fn(str) -> A<str>;
| ^ doesn't have a size known at compile-time
|
= help: within `A<str>`, the trait `Sized` is not implemented for `str`
= note: required because it appears within the type `A<str>`
note: required because it appears within the type `A<str>`
--> $DIR/issue-50940-with-feature.rs:5:12
|
LL | struct A<X: ?Sized>(X);
| ^
= note: the return type of a function must have a statically known size

error: aborting due to previous error; 1 warning emitted
12 changes: 10 additions & 2 deletions src/test/ui/unsized-locals/unsized-exprs.stderr
Original file line number Diff line number Diff line change
@@ -15,7 +15,11 @@ LL | udrop::<A<[u8]>>(A { 0: *foo() });
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `A<[u8]>`, the trait `Sized` is not implemented for `[u8]`
= note: required because it appears within the type `A<[u8]>`
note: required because it appears within the type `A<[u8]>`
--> $DIR/unsized-exprs.rs:3:8
|
LL | struct A<X: ?Sized>(X);
| ^
= note: structs must have a statically known size to be initialized

error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
@@ -25,7 +29,11 @@ LL | udrop::<A<[u8]>>(A(*foo()));
| ^ doesn't have a size known at compile-time
|
= help: within `A<[u8]>`, the trait `Sized` is not implemented for `[u8]`
= note: required because it appears within the type `A<[u8]>`
note: required because it appears within the type `A<[u8]>`
--> $DIR/unsized-exprs.rs:3:8
|
LL | struct A<X: ?Sized>(X);
| ^
= note: the return type of a function must have a statically known size

error: aborting due to 3 previous errors
24 changes: 20 additions & 4 deletions src/test/ui/unsized/unsized-enum2.stderr
Original file line number Diff line number Diff line change
@@ -301,7 +301,11 @@ LL | VI(Path1),
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path1`, the trait `Sized` is not implemented for `(dyn PathHelper1 + 'static)`
= note: required because it appears within the type `Path1`
note: required because it appears within the type `Path1`
--> $DIR/unsized-enum2.rs:16:8
|
LL | struct Path1(dyn PathHelper1);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
@@ -320,7 +324,11 @@ LL | VJ{x: Path2},
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path2`, the trait `Sized` is not implemented for `(dyn PathHelper2 + 'static)`
= note: required because it appears within the type `Path2`
note: required because it appears within the type `Path2`
--> $DIR/unsized-enum2.rs:17:8
|
LL | struct Path2(dyn PathHelper2);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
@@ -339,7 +347,11 @@ LL | VK(isize, Path3),
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path3`, the trait `Sized` is not implemented for `(dyn PathHelper3 + 'static)`
= note: required because it appears within the type `Path3`
note: required because it appears within the type `Path3`
--> $DIR/unsized-enum2.rs:18:8
|
LL | struct Path3(dyn PathHelper3);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
@@ -358,7 +370,11 @@ LL | VL{u: isize, x: Path4},
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path4`, the trait `Sized` is not implemented for `(dyn PathHelper4 + 'static)`
= note: required because it appears within the type `Path4`
note: required because it appears within the type `Path4`
--> $DIR/unsized-enum2.rs:19:8
|
LL | struct Path4(dyn PathHelper4);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
6 changes: 5 additions & 1 deletion src/test/ui/unsized/unsized-struct.stderr
Original file line number Diff line number Diff line change
@@ -28,7 +28,11 @@ LL | fn bar2<T: ?Sized>() { is_sized::<Bar<T>>() }
| |
| this type parameter needs to be `std::marker::Sized`
|
= note: required because it appears within the type `Bar<T>`
note: required because it appears within the type `Bar<T>`
--> $DIR/unsized-struct.rs:11:8
|
LL | struct Bar<T: ?Sized> { data: T }
| ^^^

error: aborting due to 2 previous errors

24 changes: 20 additions & 4 deletions src/test/ui/unsized3.stderr
Original file line number Diff line number Diff line change
@@ -41,7 +41,11 @@ LL | fn f8<X: ?Sized>(x1: &S<X>, x2: &S<X>) {
LL | f5(x1);
| ^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn f5<Y: ?Sized>(x: &Y) {}
@@ -55,7 +59,11 @@ LL | fn f9<X: ?Sized>(x1: Box<S<X>>) {
LL | f5(&(*x1, 34));
| ^^^^^^^^^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
= note: only the last element of a tuple may have a dynamically sized type

error[E0277]: the size for values of type `X` cannot be known at compilation time
@@ -66,7 +74,11 @@ LL | fn f10<X: ?Sized>(x1: Box<S<X>>) {
LL | f5(&(32, *x1));
| ^^^^^^^^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
= note: required because it appears within the type `({integer}, S<X>)`
= note: tuples must have a statically known size to be initialized

@@ -81,7 +93,11 @@ LL | fn f10<X: ?Sized>(x1: Box<S<X>>) {
LL | f5(&(32, *x1));
| ^^^^^^^^^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
= note: required because it appears within the type `({integer}, S<X>)`
help: consider relaxing the implicit `Sized` restriction
|