From 022c148fcd9e4339b4b59dfaee58ca5905d71b2d Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Mon, 7 Sep 2020 10:01:45 +0100 Subject: [PATCH] Fix tests from rebase --- compiler/rustc_middle/src/ty/sty.rs | 4 +- .../src/traits/select/confirmation.rs | 17 ++-- .../src/traits/select/mod.rs | 18 ++-- compiler/rustc_traits/src/chalk/lowering.rs | 5 +- compiler/rustc_typeck/src/check/check.rs | 10 +- compiler/rustc_typeck/src/collect.rs | 1 + ...issue_62289.test.ElaborateDrops.before.mir | 2 +- ...mplify_arm.id_try.SimplifyArmIdentity.diff | 16 ++-- ...implify_arm.id_try.SimplifyBranchSame.diff | 16 ++-- .../assoc-type-eq-with-dyn-atb-fail.rs | 9 +- .../assoc-type-eq-with-dyn-atb-fail.stderr | 12 ++- .../bad-bounds-on-assoc-in-trait.rs | 6 +- .../bad-bounds-on-assoc-in-trait.stderr | 59 ++++++------ .../bounds-on-assoc-in-trait.rs | 6 +- .../bounds-on-assoc-in-trait.stderr | 26 +++--- .../associated-type-bounds/duplicate.stderr | 26 +++++- .../associated-types/defaults-suitability.rs | 4 +- .../defaults-suitability.stderr | 43 ++++----- .../defaults-unsound-62211-1.rs | 4 + .../defaults-unsound-62211-1.stderr | 91 ++++++------------- .../defaults-unsound-62211-2.rs | 4 + .../defaults-unsound-62211-2.stderr | 91 ++++++------------- .../ui/associated-types/defaults-wf.stderr | 4 +- .../ui/associated-types/issue-43924.stderr | 8 +- .../ui/async-await/async-error-span.stderr | 1 - src/test/ui/async-await/issue-61076.stderr | 19 ---- .../issue-64130-4-async-move.stderr | 13 +-- src/test/ui/async-await/issue-70818.stderr | 3 - src/test/ui/closures/issue-41366.stderr | 6 +- src/test/ui/conservative_impl_trait.stderr | 1 - .../feature-gate-associated_type_bounds.rs | 3 +- ...feature-gate-associated_type_bounds.stderr | 44 ++++----- .../feature-gate-generic_associated_types.rs | 2 +- ...ature-gate-generic_associated_types.stderr | 8 +- src/test/ui/for/for-c-in-str.rs | 4 +- src/test/ui/for/for-c-in-str.stderr | 3 +- src/test/ui/for/for-loop-bogosity.stderr | 1 + src/test/ui/generator/sized-yield.stderr | 2 +- .../cross-crate-bounds.rs | 2 +- .../cross-crate-bounds.stderr | 4 +- .../impl_bounds.stderr | 19 +++- .../projection-bound-cycle-generic.rs | 2 +- .../projection-bound-cycle-generic.stderr | 2 +- .../projection-bound-cycle.rs | 2 +- .../projection-bound-cycle.stderr | 2 +- src/test/ui/impl-trait/issue-55872-2.stderr | 2 - ...r-async-enabled-impl-trait-bindings.stderr | 2 +- src/test/ui/issues-71798.stderr | 1 - src/test/ui/issues/issue-20605.stderr | 6 +- .../ui/issues/issue-20831-debruijn.stderr | 10 +- src/test/ui/issues/issue-23122-2.stderr | 2 +- src/test/ui/issues/issue-28098.stderr | 7 +- src/test/ui/issues/issue-33941.stderr | 7 +- src/test/ui/issues/issue-41139.rs | 8 +- src/test/ui/issues/issue-41139.stderr | 16 ++-- .../issues/issue-43784-associated-type.stderr | 4 +- src/test/ui/issues/issue-60283.stderr | 6 +- src/test/ui/iterators/array-of-ranges.stderr | 9 ++ src/test/ui/iterators/array.stderr | 3 + src/test/ui/iterators/integral.stderr | 12 +++ src/test/ui/iterators/ranges.stderr | 2 + src/test/ui/iterators/string.stderr | 2 + .../ui/parser/struct-literal-in-for.stderr | 1 + .../ui/privacy/private-in-public-assoc-ty.rs | 10 +- .../privacy/private-in-public-assoc-ty.stderr | 6 +- src/test/ui/privacy/pub-priv-dep/pub-priv1.rs | 3 +- .../ui/privacy/pub-priv-dep/pub-priv1.stderr | 2 +- src/test/ui/question-mark-type-infer.stderr | 3 +- src/test/ui/range/range-1.stderr | 4 +- ...ions-normalize-in-where-clause-list.stderr | 42 ++------- .../suggestions/suggest-remove-refs-1.stderr | 1 + .../suggestions/suggest-remove-refs-2.stderr | 1 + .../suggestions/suggest-remove-refs-3.stderr | 1 + .../ui/traits/check-trait-object-bounds-1.rs | 2 +- .../traits/check-trait-object-bounds-1.stderr | 4 +- .../ui/traits/check-trait-object-bounds-2.rs | 2 +- .../traits/check-trait-object-bounds-2.stderr | 4 +- .../ui/traits/check-trait-object-bounds-4.rs | 2 +- .../traits/check-trait-object-bounds-4.stderr | 4 +- .../ui/traits/cycle-cache-err-60010.stderr | 24 +---- ...raits-inductive-overflow-two-traits.stderr | 4 +- src/test/ui/try-block/try-block-bad-type.rs | 4 +- .../ui/try-block/try-block-bad-type.stderr | 14 ++- .../ui/try-block/try-block-in-while.stderr | 4 +- .../bounds-are-checked-2.rs | 4 +- .../bounds-are-checked-2.stderr | 8 +- .../bounds-are-checked.stderr | 4 +- .../generic_duplicate_param_use5.rs | 4 +- .../generic_duplicate_param_use5.stderr | 31 ++++++- .../generic_duplicate_param_use6.rs | 3 +- .../generic_duplicate_param_use6.stderr | 19 +++- .../generic_duplicate_param_use8.rs | 3 +- .../generic_duplicate_param_use8.stderr | 19 +++- .../generic_duplicate_param_use9.rs | 3 + .../generic_duplicate_param_use9.stderr | 43 ++++++++- .../generic_type_does_not_live_long_enough.rs | 3 +- ...eric_type_does_not_live_long_enough.stderr | 11 ++- .../issue-57611-trait-alias.rs | 4 + .../issue-57611-trait-alias.stderr | 38 +++++++- .../ui/ufcs/ufcs-qpath-self-mismatch.stderr | 1 + 100 files changed, 584 insertions(+), 480 deletions(-) diff --git a/compiler/rustc_middle/src/ty/sty.rs b/compiler/rustc_middle/src/ty/sty.rs index 09895605dca..1af56972ad0 100644 --- a/compiler/rustc_middle/src/ty/sty.rs +++ b/compiler/rustc_middle/src/ty/sty.rs @@ -1513,7 +1513,9 @@ impl<'tcx> ExistentialProjection<'tcx> { /// then this function would return a `exists T. T: Iterator` existential trait /// reference. pub fn trait_ref(&self, tcx: TyCtxt<'_>) -> ty::ExistentialTraitRef<'tcx> { - // FIXME(generic_associated_types): truncate substs to have the right length. + // FIXME(generic_associated_types): substs is the substs of the + // associated type, which should be truncated to get the correct substs + // for the trait. let def_id = tcx.associated_item(self.item_def_id).container.id(); ty::ExistentialTraitRef { def_id, substs: self.substs } } diff --git a/compiler/rustc_trait_selection/src/traits/select/confirmation.rs b/compiler/rustc_trait_selection/src/traits/select/confirmation.rs index 905a2ab7057..96f0bedf6f1 100644 --- a/compiler/rustc_trait_selection/src/traits/select/confirmation.rs +++ b/compiler/rustc_trait_selection/src/traits/select/confirmation.rs @@ -125,29 +125,34 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { self.infcx.commit_unconditionally(|_| { let tcx = self.tcx(); - let bound_self_ty = self.infcx.shallow_resolve(obligation.self_ty()); - let (def_id, substs) = match *bound_self_ty.skip_binder().kind() { + let trait_predicate = self.infcx.shallow_resolve(obligation.predicate); + let placeholder_trait_predicate = + self.infcx().replace_bound_vars_with_placeholders(&trait_predicate); + let placeholder_self_ty = placeholder_trait_predicate.self_ty(); + let (def_id, substs) = match *placeholder_self_ty.kind() { ty::Projection(proj) => (proj.item_def_id, proj.substs), ty::Opaque(def_id, substs) => (def_id, substs), - _ => bug!("projection candidate for unexpected type: {:?}", bound_self_ty), + _ => bug!("projection candidate for unexpected type: {:?}", placeholder_self_ty), }; let candidate_predicate = tcx.item_bounds(def_id)[idx].subst(tcx, substs); let candidate = candidate_predicate .to_opt_poly_trait_ref() .expect("projection candidate is not a trait predicate"); - let Normalized { value: candidate, mut obligations } = normalize_with_depth( + let mut obligations = Vec::new(); + let candidate = normalize_with_depth_to( self, obligation.param_env, obligation.cause.clone(), obligation.recursion_depth + 1, &candidate, + &mut obligations, ); obligations.extend( self.infcx .at(&obligation.cause, obligation.param_env) - .sup(obligation.predicate.to_poly_trait_ref(), candidate) + .sup(placeholder_trait_predicate.trait_ref.to_poly_trait_ref(), candidate) .map(|InferOk { obligations, .. }| obligations) .unwrap_or_else(|_| { bug!( @@ -158,7 +163,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { }), ); - if let ty::Projection(..) = bound_self_ty.skip_binder().kind() { + if let ty::Projection(..) = placeholder_self_ty.kind() { for predicate in tcx.predicates_of(def_id).instantiate_own(tcx, substs).predicates { let normalized = normalize_with_depth_to( self, diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index 3b2cae0dbd5..a142ba58a69 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -1204,22 +1204,18 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { if let ty::PredicateAtom::Trait(pred, _) = bound.skip_binders() { let bound = ty::Binder::bind(pred.trait_ref); if self.infcx.probe(|_| { - if let Ok(normalized_trait) = self.match_projection( + match self.match_projection( obligation, bound, placeholder_trait_predicate.trait_ref, ) { - match normalized_trait { - None => true, - Some(normalized_trait) - if distinct_normalized_bounds.insert(normalized_trait) => - { - true - } - _ => false, + Ok(None) => true, + Ok(Some(normalized_trait)) + if distinct_normalized_bounds.insert(normalized_trait) => + { + true } - } else { - false + _ => false, } }) { return Some(idx); diff --git a/compiler/rustc_traits/src/chalk/lowering.rs b/compiler/rustc_traits/src/chalk/lowering.rs index a59c81aa9b8..bdb2513cc46 100644 --- a/compiler/rustc_traits/src/chalk/lowering.rs +++ b/compiler/rustc_traits/src/chalk/lowering.rs @@ -767,7 +767,10 @@ impl<'tcx> LowerInto<'tcx, Option bug!("unexpected predicate {}", &self), + | ty::PredicateAtom::ConstEquate(..) + | ty::PredicateAtom::TypeWellFormedFromEnv(..) => { + bug!("unexpected predicate {}", &self) + } } } } diff --git a/compiler/rustc_typeck/src/check/check.rs b/compiler/rustc_typeck/src/check/check.rs index cfd75db61f7..d319ac2cba6 100644 --- a/compiler/rustc_typeck/src/check/check.rs +++ b/compiler/rustc_typeck/src/check/check.rs @@ -4,13 +4,13 @@ use super::compare_method::{compare_const_impl, compare_impl_method, compare_ty_ use super::*; use rustc_attr as attr; -use rustc_errors::Applicability; +use rustc_errors::{Applicability, ErrorReported}; use rustc_hir as hir; use rustc_hir::def_id::{DefId, LocalDefId, LOCAL_CRATE}; use rustc_hir::lang_items::LangItem; use rustc_hir::{ItemKind, Node}; use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind}; -use rustc_infer::infer::RegionVariableOrigin; +use rustc_infer::infer::{RegionVariableOrigin, TyCtxtInferExt}; use rustc_middle::ty::fold::TypeFoldable; use rustc_middle::ty::subst::GenericArgKind; use rustc_middle::ty::util::{Discr, IntTypeExt, Representability}; @@ -19,6 +19,8 @@ use rustc_session::config::EntryFnType; use rustc_span::symbol::sym; use rustc_span::{self, MultiSpan, Span}; use rustc_target::spec::abi::Abi; +use rustc_trait_selection::opaque_types::InferCtxtExt as _; +use rustc_trait_selection::traits::error_reporting::InferCtxtExt as _; use rustc_trait_selection::traits::{self, ObligationCauseCode}; pub fn check_wf_new(tcx: TyCtxt<'_>) { @@ -386,7 +388,9 @@ pub(super) fn check_opaque<'tcx>( origin: &hir::OpaqueTyOrigin, ) { check_opaque_for_inheriting_lifetimes(tcx, def_id, span); - tcx.ensure().type_of(def_id); + if tcx.type_of(def_id).references_error() { + return; + } if check_opaque_for_cycles(tcx, def_id, substs, span, origin).is_err() { return; } diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index 82d46b78178..092dae18192 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -704,6 +704,7 @@ fn convert_item(tcx: TyCtxt<'_>, item_id: hir::HirId) { hir::ItemKind::OpaqueTy(..) => { tcx.ensure().generics_of(def_id); tcx.ensure().predicates_of(def_id); + tcx.ensure().explicit_item_bounds(def_id); } hir::ItemKind::TyAlias(..) | hir::ItemKind::Static(..) diff --git a/src/test/mir-opt/issue_62289.test.ElaborateDrops.before.mir b/src/test/mir-opt/issue_62289.test.ElaborateDrops.before.mir index 62bf97a772e..c1421f20a0b 100644 --- a/src/test/mir-opt/issue_62289.test.ElaborateDrops.before.mir +++ b/src/test/mir-opt/issue_62289.test.ElaborateDrops.before.mir @@ -69,7 +69,7 @@ fn test() -> Option> { bb5: { StorageDead(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 - _0 = > as Try>::from_error(move _8) -> [return: bb6, unwind: bb12]; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 + _0 = > as Try>::from_error(move _8) -> [return: bb6, unwind: bb12]; // scope 2 at $DIR/issue-62289.rs:9:15: 9:20 // mir::Constant // + span: $DIR/issue-62289.rs:9:15: 9:20 // + literal: Const { ty: fn(> as std::ops::Try>::Error) -> std::option::Option> {> as std::ops::Try>::from_error}, val: Value(Scalar()) } diff --git a/src/test/mir-opt/simplify_arm.id_try.SimplifyArmIdentity.diff b/src/test/mir-opt/simplify_arm.id_try.SimplifyArmIdentity.diff index 6ec2b98bf5b..a811a2c178f 100644 --- a/src/test/mir-opt/simplify_arm.id_try.SimplifyArmIdentity.diff +++ b/src/test/mir-opt/simplify_arm.id_try.SimplifyArmIdentity.diff @@ -1,6 +1,6 @@ - // MIR for `id_try` before SimplifyArmIdentity + // MIR for `id_try` after SimplifyArmIdentity - + fn id_try(_1: std::result::Result) -> std::result::Result { debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:23:11: 23:12 let mut _0: std::result::Result; // return place in scope 0 at $DIR/simplify-arm.rs:23:34: 23:49 @@ -29,7 +29,7 @@ scope 8 { - debug v => _8; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL + debug v => ((_0 as Err).0: i32); // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL - let mut _12: i32; // in scope 8 at $DIR/simplify-arm.rs:24:14: 24:15 + let mut _12: i32; // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15 } } } @@ -42,7 +42,7 @@ scope 6 { debug self => _4; // in scope 6 at $SRC_DIR/core/src/result.rs:LL:COL } - + bb0: { StorageLive(_2); // scope 0 at $DIR/simplify-arm.rs:24:9: 24:10 StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15 @@ -53,7 +53,7 @@ _5 = discriminant(_3); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 switchInt(move _5) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 } - + bb1: { - StorageLive(_10); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15 - _10 = ((_3 as Ok).0: u8); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15 @@ -69,11 +69,11 @@ StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2 goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 } - + bb2: { unreachable; // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15 } - + bb3: { - StorageLive(_6); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 - _6 = ((_3 as Err).0: i32); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 @@ -94,9 +94,9 @@ StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2 goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 } - + bb4: { return; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 } } - + diff --git a/src/test/mir-opt/simplify_arm.id_try.SimplifyBranchSame.diff b/src/test/mir-opt/simplify_arm.id_try.SimplifyBranchSame.diff index 172fb04a3cc..b0cc3e88f35 100644 --- a/src/test/mir-opt/simplify_arm.id_try.SimplifyBranchSame.diff +++ b/src/test/mir-opt/simplify_arm.id_try.SimplifyBranchSame.diff @@ -1,6 +1,6 @@ - // MIR for `id_try` before SimplifyBranchSame + // MIR for `id_try` after SimplifyBranchSame - + fn id_try(_1: std::result::Result) -> std::result::Result { debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:23:11: 23:12 let mut _0: std::result::Result; // return place in scope 0 at $DIR/simplify-arm.rs:23:34: 23:49 @@ -25,7 +25,7 @@ } scope 8 { debug v => ((_0 as Err).0: i32); // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL - let mut _12: i32; // in scope 8 at $DIR/simplify-arm.rs:24:14: 24:15 + let mut _12: i32; // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15 } } } @@ -37,7 +37,7 @@ scope 6 { debug self => _4; // in scope 6 at $SRC_DIR/core/src/result.rs:LL:COL } - + bb0: { StorageLive(_2); // scope 0 at $DIR/simplify-arm.rs:24:9: 24:10 StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15 @@ -49,7 +49,7 @@ - switchInt(move _5) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 + goto -> bb1; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 } - + bb1: { _0 = move _3; // scope 1 at $DIR/simplify-arm.rs:25:5: 25:10 StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16 @@ -57,20 +57,20 @@ - goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 + goto -> bb2; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 } - + bb2: { - unreachable; // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15 - } -- +- - bb3: { - _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL - StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16 - StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2 - goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 - } -- +- - bb4: { return; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2 } } - + diff --git a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs index 498a555c441..73b23da5bcb 100644 --- a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs +++ b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs @@ -12,7 +12,9 @@ fn main() {} -trait Bar { type Assoc; } +trait Bar { + type Assoc; +} trait Thing { type Out; @@ -20,11 +22,14 @@ trait Thing { } struct AssocNoCopy; -impl Bar for AssocNoCopy { type Assoc = String; } +impl Bar for AssocNoCopy { + type Assoc = String; +} impl Thing for AssocNoCopy { type Out = Box>; //~^ ERROR the trait bound `String: Copy` is not satisfied + //~| ERROR the trait bound `String: Copy` is not satisfied fn func() -> Self::Out { Box::new(AssocNoCopy) diff --git a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr index 5236f0efa86..414d74d4786 100644 --- a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr +++ b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr @@ -1,11 +1,15 @@ error[E0277]: the trait bound `String: Copy` is not satisfied - --> $DIR/assoc-type-eq-with-dyn-atb-fail.rs:26:28 + --> $DIR/assoc-type-eq-with-dyn-atb-fail.rs:30:28 | LL | type Out = Box>; | ^^^^^^^^^^^ the trait `Copy` is not implemented for `String` - | - = note: the return type of a function must have a statically known size -error: aborting due to previous error +error[E0277]: the trait bound `String: Copy` is not satisfied + --> $DIR/assoc-type-eq-with-dyn-atb-fail.rs:30:28 + | +LL | type Out = Box>; + | ^^^^^^^^^^^ the trait `Copy` is not implemented for `String` + +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.rs b/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.rs index 4f9100b6774..d180de9be3b 100644 --- a/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.rs +++ b/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.rs @@ -24,9 +24,9 @@ impl<'a, 'b> Lam<&'a &'b u8> for L2 { trait Case1 { type C: Clone + Iterator Lam<&'a u8, App: Debug>> + Sync>; - //~^ ERROR `<::C as std::iter::Iterator>::Item` is not an iterator - //~| ERROR `<::C as std::iter::Iterator>::Item` cannot be sent between threads safely - //~| ERROR `<::C as std::iter::Iterator>::Item` cannot be shared between threads safely + //~^ ERROR `<::C as Iterator>::Item` is not an iterator + //~| ERROR `<::C as Iterator>::Item` cannot be sent between threads safely + //~| ERROR `<::C as Iterator>::Item` cannot be shared between threads safely } pub struct S1; diff --git a/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.stderr b/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.stderr index c95c5ca5884..e68b5b342a4 100644 --- a/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.stderr +++ b/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.stderr @@ -1,53 +1,48 @@ -error[E0277]: `<::C as std::iter::Iterator>::Item` is not an iterator - --> $DIR/bad-bounds-on-assoc-in-trait.rs:28:5 +error[E0277]: `<::C as Iterator>::Item` is not an iterator + --> $DIR/bad-bounds-on-assoc-in-trait.rs:26:5 | -LL | / type C: Clone + Iterator Lam<&'a u8, App: -LL | | Debug -LL | | > -LL | | > + Sync>; - | |__________________^ `<::C as std::iter::Iterator>::Item` is not an iterator +LL | type C: Clone + Iterator Lam<&'a u8, App: Debug>> + Sync>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `<::C as Iterator>::Item` is not an iterator | - = help: the trait `std::iter::Iterator` is not implemented for `<::C as std::iter::Iterator>::Item` + = help: the trait `Iterator` is not implemented for `<::C as Iterator>::Item` help: consider further restricting the associated type | -LL | trait Case1 where <::C as std::iter::Iterator>::Item: std::iter::Iterator { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait Case1 where <::C as Iterator>::Item: Iterator { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: `<::C as std::iter::Iterator>::Item` cannot be sent between threads safely - --> $DIR/bad-bounds-on-assoc-in-trait.rs:23:9 +error[E0277]: `<::C as Iterator>::Item` cannot be sent between threads safely + --> $DIR/bad-bounds-on-assoc-in-trait.rs:26:36 | -LL | Send + Iterator::C as std::iter::Iterator>::Item` cannot be sent between threads safely - | - ::: $SRC_DIR/libcore/marker.rs:LL:COL +LL | type C: Clone + Iterator Lam<&'a u8, App: Debug>> + Sync>; + | ^^^^ `<::C as Iterator>::Item` cannot be sent between threads safely + | + ::: $SRC_DIR/core/src/marker.rs:LL:COL | LL | pub unsafe auto trait Send { - | -------------------------- required by this bound in `std::marker::Send` + | -------------------------- required by this bound in `Send` | - = help: the trait `std::marker::Send` is not implemented for `<::C as std::iter::Iterator>::Item` + = help: the trait `Send` is not implemented for `<::C as Iterator>::Item` help: consider further restricting the associated type | -LL | trait Case1 where <::C as std::iter::Iterator>::Item: std::marker::Send { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait Case1 where <::C as Iterator>::Item: Send { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: `<::C as std::iter::Iterator>::Item` cannot be shared between threads safely - --> $DIR/bad-bounds-on-assoc-in-trait.rs:27:13 +error[E0277]: `<::C as Iterator>::Item` cannot be shared between threads safely + --> $DIR/bad-bounds-on-assoc-in-trait.rs:26:93 | -LL | > + Sync>; - | ^^^^ `<::C as std::iter::Iterator>::Item` cannot be shared between threads safely - | - ::: $SRC_DIR/libcore/marker.rs:LL:COL +LL | type C: Clone + Iterator Lam<&'a u8, App: Debug>> + Sync>; + | ^^^^ `<::C as Iterator>::Item` cannot be shared between threads safely + | + ::: $SRC_DIR/core/src/marker.rs:LL:COL | LL | pub unsafe auto trait Sync { - | -------------------------- required by this bound in `std::marker::Sync` + | -------------------------- required by this bound in `Sync` | - = help: the trait `std::marker::Sync` is not implemented for `<::C as std::iter::Iterator>::Item` + = help: the trait `Sync` is not implemented for `<::C as Iterator>::Item` help: consider further restricting the associated type | -LL | trait Case1 where <::C as std::iter::Iterator>::Item: std::marker::Sync { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait Case1 where <::C as Iterator>::Item: Sync { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 3 previous errors diff --git a/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.rs b/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.rs index 4025e0fc5e1..23be735010b 100644 --- a/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.rs +++ b/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.rs @@ -1,5 +1,3 @@ -// ignore-tidy-linelength - #![feature(associated_type_bounds)] use std::fmt::Debug; @@ -18,7 +16,7 @@ impl<'a, 'b> Lam<&'a &'b u8> for L2 { type App = u8; } trait Case1 { type A: Iterator; - //~^ ERROR `<::A as std::iter::Iterator>::Item` doesn't implement `std::fmt::Debug` + //~^ ERROR `<::A as Iterator>::Item` doesn't implement `Debug` type B: Iterator; } @@ -35,7 +33,7 @@ impl Case1 for S1 { // bounds of `Out`, but trait selection can't find the bound since it applies // to a type other than `Self::Out`. pub trait Foo { type Out: Baz; } -//~^ ERROR trait bound `<::Out as Baz>::Assoc: std::default::Default` is not satisfied +//~^ ERROR trait bound `<::Out as Baz>::Assoc: Default` is not satisfied pub trait Baz { type Assoc; } #[derive(Default)] diff --git a/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.stderr b/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.stderr index cc0b58188e6..919b18632e6 100644 --- a/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.stderr +++ b/src/test/ui/associated-type-bounds/bounds-on-assoc-in-trait.stderr @@ -1,35 +1,35 @@ -error[E0277]: `<::A as std::iter::Iterator>::Item` doesn't implement `std::fmt::Debug` - --> $DIR/bounds-on-assoc-in-trait.rs:20:28 +error[E0277]: `<::A as Iterator>::Item` doesn't implement `Debug` + --> $DIR/bounds-on-assoc-in-trait.rs:18:28 | LL | type A: Iterator; - | ^^^^^ `<::A as std::iter::Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug` + | ^^^^^ `<::A as Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `Debug` | ::: $SRC_DIR/core/src/fmt/mod.rs:LL:COL | LL | pub trait Debug { - | --------------- required by this bound in `std::fmt::Debug` + | --------------- required by this bound in `Debug` | - = help: the trait `std::fmt::Debug` is not implemented for `<::A as std::iter::Iterator>::Item` + = help: the trait `Debug` is not implemented for `<::A as Iterator>::Item` help: consider further restricting the associated type | -LL | trait Case1 where <::A as std::iter::Iterator>::Item: std::fmt::Debug { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait Case1 where <::A as Iterator>::Item: Debug { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `<::Out as Baz>::Assoc: std::default::Default` is not satisfied - --> $DIR/bounds-on-assoc-in-trait.rs:37:38 +error[E0277]: the trait bound `<::Out as Baz>::Assoc: Default` is not satisfied + --> $DIR/bounds-on-assoc-in-trait.rs:35:38 | LL | pub trait Foo { type Out: Baz; } - | ^^^^^^^ the trait `std::default::Default` is not implemented for `<::Out as Baz>::Assoc` + | ^^^^^^^ the trait `Default` is not implemented for `<::Out as Baz>::Assoc` | ::: $SRC_DIR/core/src/default.rs:LL:COL | LL | pub trait Default: Sized { - | ------------------------ required by this bound in `std::default::Default` + | ------------------------ required by this bound in `Default` | help: consider further restricting the associated type | -LL | pub trait Foo where <::Out as Baz>::Assoc: std::default::Default { type Out: Baz; } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | pub trait Foo where <::Out as Baz>::Assoc: Default { type Out: Baz; } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 2 previous errors diff --git a/src/test/ui/associated-type-bounds/duplicate.stderr b/src/test/ui/associated-type-bounds/duplicate.stderr index b5941fb80c7..de2876d6b60 100644 --- a/src/test/ui/associated-type-bounds/duplicate.stderr +++ b/src/test/ui/associated-type-bounds/duplicate.stderr @@ -512,7 +512,7 @@ LL | trait TRSW3 where Self: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:167:40 + --> $DIR/duplicate.rs:152:40 | LL | type TADyn1 = dyn Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -535,6 +535,30 @@ LL | type TADyn3 = dyn Iterator; | | | `Item` bound here first +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:145:43 + | +LL | trait TRA1 { type A: Iterator; } + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:147:43 + | +LL | trait TRA2 { type A: Iterator; } + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:149:46 + | +LL | trait TRA3 { type A: Iterator; } + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + error: aborting due to 69 previous errors; 1 warning emitted For more information about this error, try `rustc --explain E0719`. diff --git a/src/test/ui/associated-types/defaults-suitability.rs b/src/test/ui/associated-types/defaults-suitability.rs index 44cc7738d7e..504c957d987 100644 --- a/src/test/ui/associated-types/defaults-suitability.rs +++ b/src/test/ui/associated-types/defaults-suitability.rs @@ -20,7 +20,7 @@ where Self::Ty: Clone, { type Ty = NotClone; - //~^ ERROR the trait bound `NotClone: std::clone::Clone` is not satisfied + //~^ ERROR the trait bound `NotClone: Clone` is not satisfied } // Involved type parameters must fulfill all bounds required by defaults that mention them @@ -85,7 +85,7 @@ where { type Bar = Vec; type Baz = T; - //~^ ERROR the trait bound `T: std::clone::Clone` is not satisfied + //~^ ERROR the trait bound `T: Clone` is not satisfied } // This one finally works, with `Clone` bounds on all assoc. types and the type diff --git a/src/test/ui/associated-types/defaults-suitability.stderr b/src/test/ui/associated-types/defaults-suitability.stderr index 5ee800e1913..274d09fd09c 100644 --- a/src/test/ui/associated-types/defaults-suitability.stderr +++ b/src/test/ui/associated-types/defaults-suitability.stderr @@ -1,31 +1,32 @@ -error[E0277]: the trait bound `NotClone: std::clone::Clone` is not satisfied +error[E0277]: the trait bound `NotClone: Clone` is not satisfied --> $DIR/defaults-suitability.rs:13:5 | LL | type Ty: Clone = NotClone; | ^^^^^^^^^-----^^^^^^^^^^^^ | | | | | required by this bound in `Tr::Ty` - | the trait `std::clone::Clone` is not implemented for `NotClone` + | the trait `Clone` is not implemented for `NotClone` -error[E0277]: the trait bound `NotClone: std::clone::Clone` is not satisfied - --> $DIR/defaults-suitability.rs:19:5 +error[E0277]: the trait bound `NotClone: Clone` is not satisfied + --> $DIR/defaults-suitability.rs:22:5 | -LL | trait Tr2 where Self::Ty: Clone { - | ----- required by this bound in `Tr2::Ty` +LL | Self::Ty: Clone, + | ----- required by this bound in `Tr2::Ty` +LL | { LL | type Ty = NotClone; | ^^^^^--^^^^^^^^^^^^ | | | | | required by a bound in this - | the trait `std::clone::Clone` is not implemented for `NotClone` + | the trait `Clone` is not implemented for `NotClone` -error[E0277]: the trait bound `T: std::clone::Clone` is not satisfied - --> $DIR/defaults-suitability.rs:25:5 +error[E0277]: the trait bound `T: Clone` is not satisfied + --> $DIR/defaults-suitability.rs:28:5 | LL | type Bar: Clone = Vec; | ^^^^^^^^^^-----^^^^^^^^^^ | | | | | required by this bound in `Foo::Bar` - | the trait `std::clone::Clone` is not implemented for `T` + | the trait `Clone` is not implemented for `T` | = note: required because of the requirements on the impl of `Clone` for `Vec` help: consider restricting type parameter `T` @@ -34,7 +35,7 @@ LL | trait Foo { | ^^^^^^^ error[E0277]: the trait bound `(): Foo` is not satisfied - --> $DIR/defaults-suitability.rs:31:5 + --> $DIR/defaults-suitability.rs:34:5 | LL | type Assoc: Foo = (); | ^^^^^^^^^^^^---------^^^^^^ @@ -43,7 +44,7 @@ LL | type Assoc: Foo = (); | the trait `Foo` is not implemented for `()` error[E0277]: the trait bound `NotClone: IsU8` is not satisfied - --> $DIR/defaults-suitability.rs:53:5 + --> $DIR/defaults-suitability.rs:56:5 | LL | Self::Assoc: IsU8, | ----------------- required by this bound in `D::Assoc` @@ -54,14 +55,14 @@ LL | type Assoc = NotClone; | | required by a bound in this | the trait `IsU8` is not implemented for `NotClone` -error[E0277]: the trait bound `>::Baz: std::clone::Clone` is not satisfied - --> $DIR/defaults-suitability.rs:62:5 +error[E0277]: the trait bound `>::Baz: Clone` is not satisfied + --> $DIR/defaults-suitability.rs:65:5 | LL | type Bar: Clone = Vec; | ^^^^^^^^^^-----^^^^^^^^^^^^^^^^^^ | | | | | required by this bound in `Foo2::Bar` - | the trait `std::clone::Clone` is not implemented for `>::Baz` + | the trait `Clone` is not implemented for `>::Baz` | = note: required because of the requirements on the impl of `Clone` for `Vec<>::Baz>` help: consider further restricting the associated type @@ -69,14 +70,14 @@ help: consider further restricting the associated type LL | trait Foo2 where >::Baz: Clone { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `>::Baz: std::clone::Clone` is not satisfied - --> $DIR/defaults-suitability.rs:71:5 +error[E0277]: the trait bound `>::Baz: Clone` is not satisfied + --> $DIR/defaults-suitability.rs:74:5 | LL | type Bar: Clone = Vec; | ^^^^^^^^^^-----^^^^^^^^^^^^^^^^^^ | | | | | required by this bound in `Foo25::Bar` - | the trait `std::clone::Clone` is not implemented for `>::Baz` + | the trait `Clone` is not implemented for `>::Baz` | = note: required because of the requirements on the impl of `Clone` for `Vec<>::Baz>` help: consider further restricting the associated type @@ -84,8 +85,8 @@ help: consider further restricting the associated type LL | trait Foo25 where >::Baz: Clone { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `T: std::clone::Clone` is not satisfied - --> $DIR/defaults-suitability.rs:83:5 +error[E0277]: the trait bound `T: Clone` is not satisfied + --> $DIR/defaults-suitability.rs:87:5 | LL | Self::Baz: Clone, | ----- required by this bound in `Foo3::Baz` @@ -94,7 +95,7 @@ LL | type Baz = T; | ^^^^^---^^^^^ | | | | | required by a bound in this - | the trait `std::clone::Clone` is not implemented for `T` + | the trait `Clone` is not implemented for `T` | help: consider further restricting type parameter `T` | diff --git a/src/test/ui/associated-types/defaults-unsound-62211-1.rs b/src/test/ui/associated-types/defaults-unsound-62211-1.rs index 093e32f66be..fa6a208b4f1 100644 --- a/src/test/ui/associated-types/defaults-unsound-62211-1.rs +++ b/src/test/ui/associated-types/defaults-unsound-62211-1.rs @@ -18,6 +18,10 @@ trait UncheckedCopy: Sized { // This Output is said to be Copy. Yet we default to Self // and it's accepted, not knowing if Self ineed is Copy type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + //~^ ERROR the trait bound `Self: Copy` is not satisfied + //~| ERROR the trait bound `Self: Deref` is not satisfied + //~| ERROR cannot add-assign `&'static str` to `Self` + //~| ERROR `Self` doesn't implement `std::fmt::Display` // We said the Output type was Copy, so we can Copy it freely! fn unchecked_copy(other: &Self::Output) -> Self::Output { diff --git a/src/test/ui/associated-types/defaults-unsound-62211-1.stderr b/src/test/ui/associated-types/defaults-unsound-62211-1.stderr index a8584d6dc5c..8e446cf051f 100644 --- a/src/test/ui/associated-types/defaults-unsound-62211-1.stderr +++ b/src/test/ui/associated-types/defaults-unsound-62211-1.stderr @@ -1,19 +1,11 @@ error[E0277]: `Self` doesn't implement `std::fmt::Display` - --> $DIR/defaults-unsound-62211-1.rs:21:5 + --> $DIR/defaults-unsound-62211-1.rs:20:5 | -LL | type Output: Copy - | ^ ------ required by a bound in this - | _____| - | | -LL | | -LL | | -LL | | -... | -LL | | + From -LL | | + Display = Self; - | |___________-------_______^ `Self` cannot be formatted with the default formatter - | | - | required by this bound in `UncheckedCopy::Output` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | `Self` cannot be formatted with the default formatter | = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead help: consider further restricting `Self` @@ -21,23 +13,14 @@ help: consider further restricting `Self` LL | trait UncheckedCopy: Sized + std::fmt::Display { | ^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `Self: std::ops::Deref` is not satisfied - --> $DIR/defaults-unsound-62211-1.rs:21:5 +error[E0277]: the trait bound `Self: Deref` is not satisfied + --> $DIR/defaults-unsound-62211-1.rs:20:5 | -LL | type Output: Copy - | ^ ------ required by a bound in this - | _____| - | | -LL | | -LL | | -LL | | -LL | | -LL | | + Deref - | | ------------------- required by this bound in `UncheckedCopy::Output` -LL | | + AddAssign<&'static str> -LL | | + From -LL | | + Display = Self; - | |_________________________^ the trait `std::ops::Deref` is not implemented for `Self` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^^^^^^^^-------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | the trait `Deref` is not implemented for `Self` | help: consider further restricting `Self` | @@ -45,46 +28,32 @@ LL | trait UncheckedCopy: Sized + Deref { | ^^^^^^^ error[E0277]: cannot add-assign `&'static str` to `Self` - --> $DIR/defaults-unsound-62211-1.rs:21:5 + --> $DIR/defaults-unsound-62211-1.rs:20:5 | -LL | type Output: Copy - | ^ ------ required by a bound in this - | _____| - | | -LL | | -LL | | -LL | | -... | -LL | | + AddAssign<&'static str> - | | ----------------------- required by this bound in `UncheckedCopy::Output` -LL | | + From -LL | | + Display = Self; - | |_________________________^ no implementation for `Self += &'static str` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | no implementation for `Self += &'static str` | help: consider further restricting `Self` | -LL | trait UncheckedCopy: Sized + std::ops::AddAssign<&'static str> { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait UncheckedCopy: Sized + AddAssign<&'static str> { + | ^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `Self: std::marker::Copy` is not satisfied - --> $DIR/defaults-unsound-62211-1.rs:21:5 +error[E0277]: the trait bound `Self: Copy` is not satisfied + --> $DIR/defaults-unsound-62211-1.rs:20:5 | -LL | type Output: Copy - | ^ ---- required by this bound in `UncheckedCopy::Output` - | _____| - | | -LL | | -LL | | -LL | | -... | -LL | | + From -LL | | + Display = Self; - | |_________________________^ the trait `std::marker::Copy` is not implemented for `Self` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | the trait `Copy` is not implemented for `Self` | help: consider further restricting `Self` | -LL | trait UncheckedCopy: Sized + std::marker::Copy { - | ^^^^^^^^^^^^^^^^^^^ +LL | trait UncheckedCopy: Sized + Copy { + | ^^^^^^ error: aborting due to 4 previous errors diff --git a/src/test/ui/associated-types/defaults-unsound-62211-2.rs b/src/test/ui/associated-types/defaults-unsound-62211-2.rs index 44bbdc9f52b..c13ec776afe 100644 --- a/src/test/ui/associated-types/defaults-unsound-62211-2.rs +++ b/src/test/ui/associated-types/defaults-unsound-62211-2.rs @@ -18,6 +18,10 @@ trait UncheckedCopy: Sized { // This Output is said to be Copy. Yet we default to Self // and it's accepted, not knowing if Self ineed is Copy type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + //~^ ERROR the trait bound `Self: Copy` is not satisfied + //~| ERROR the trait bound `Self: Deref` is not satisfied + //~| ERROR cannot add-assign `&'static str` to `Self` + //~| ERROR `Self` doesn't implement `std::fmt::Display` // We said the Output type was Copy, so we can Copy it freely! fn unchecked_copy(other: &Self::Output) -> Self::Output { diff --git a/src/test/ui/associated-types/defaults-unsound-62211-2.stderr b/src/test/ui/associated-types/defaults-unsound-62211-2.stderr index 6a8e3ff7b62..93f4f497b38 100644 --- a/src/test/ui/associated-types/defaults-unsound-62211-2.stderr +++ b/src/test/ui/associated-types/defaults-unsound-62211-2.stderr @@ -1,19 +1,11 @@ error[E0277]: `Self` doesn't implement `std::fmt::Display` - --> $DIR/defaults-unsound-62211-2.rs:21:5 + --> $DIR/defaults-unsound-62211-2.rs:20:5 | -LL | type Output: Copy - | ^ ------ required by a bound in this - | _____| - | | -LL | | -LL | | -LL | | -... | -LL | | + From -LL | | + Display = Self; - | |___________-------_______^ `Self` cannot be formatted with the default formatter - | | - | required by this bound in `UncheckedCopy::Output` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | `Self` cannot be formatted with the default formatter | = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead help: consider further restricting `Self` @@ -21,23 +13,14 @@ help: consider further restricting `Self` LL | trait UncheckedCopy: Sized + std::fmt::Display { | ^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `Self: std::ops::Deref` is not satisfied - --> $DIR/defaults-unsound-62211-2.rs:21:5 +error[E0277]: the trait bound `Self: Deref` is not satisfied + --> $DIR/defaults-unsound-62211-2.rs:20:5 | -LL | type Output: Copy - | ^ ------ required by a bound in this - | _____| - | | -LL | | -LL | | -LL | | -LL | | -LL | | + Deref - | | ------------------- required by this bound in `UncheckedCopy::Output` -LL | | + AddAssign<&'static str> -LL | | + From -LL | | + Display = Self; - | |_________________________^ the trait `std::ops::Deref` is not implemented for `Self` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^^^^^^^^-------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | the trait `Deref` is not implemented for `Self` | help: consider further restricting `Self` | @@ -45,46 +28,32 @@ LL | trait UncheckedCopy: Sized + Deref { | ^^^^^^^ error[E0277]: cannot add-assign `&'static str` to `Self` - --> $DIR/defaults-unsound-62211-2.rs:21:5 + --> $DIR/defaults-unsound-62211-2.rs:20:5 | -LL | type Output: Copy - | ^ ------ required by a bound in this - | _____| - | | -LL | | -LL | | -LL | | -... | -LL | | + AddAssign<&'static str> - | | ----------------------- required by this bound in `UncheckedCopy::Output` -LL | | + From -LL | | + Display = Self; - | |_________________________^ no implementation for `Self += &'static str` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | no implementation for `Self += &'static str` | help: consider further restricting `Self` | -LL | trait UncheckedCopy: Sized + std::ops::AddAssign<&'static str> { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait UncheckedCopy: Sized + AddAssign<&'static str> { + | ^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0277]: the trait bound `Self: std::marker::Copy` is not satisfied - --> $DIR/defaults-unsound-62211-2.rs:21:5 +error[E0277]: the trait bound `Self: Copy` is not satisfied + --> $DIR/defaults-unsound-62211-2.rs:20:5 | -LL | type Output: Copy - | ^ ---- required by this bound in `UncheckedCopy::Output` - | _____| - | | -LL | | -LL | | -LL | | -... | -LL | | + From -LL | | + Display = Self; - | |_________________________^ the trait `std::marker::Copy` is not implemented for `Self` +LL | type Output: Copy + Deref + AddAssign<&'static str> + From + Display = Self; + | ^^^^^^^^^^^^^----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | | + | | required by this bound in `UncheckedCopy::Output` + | the trait `Copy` is not implemented for `Self` | help: consider further restricting `Self` | -LL | trait UncheckedCopy: Sized + std::marker::Copy { - | ^^^^^^^^^^^^^^^^^^^ +LL | trait UncheckedCopy: Sized + Copy { + | ^^^^^^ error: aborting due to 4 previous errors diff --git a/src/test/ui/associated-types/defaults-wf.stderr b/src/test/ui/associated-types/defaults-wf.stderr index d1832cdbc0c..f9044c2ea1b 100644 --- a/src/test/ui/associated-types/defaults-wf.stderr +++ b/src/test/ui/associated-types/defaults-wf.stderr @@ -7,9 +7,9 @@ LL | type Ty = Vec<[u8]>; ::: $SRC_DIR/alloc/src/vec.rs:LL:COL | LL | pub struct Vec { - | - required by this bound in `std::vec::Vec` + | - required by this bound in `Vec` | - = help: the trait `std::marker::Sized` is not implemented for `[u8]` + = help: the trait `Sized` is not implemented for `[u8]` error: aborting due to previous error diff --git a/src/test/ui/associated-types/issue-43924.stderr b/src/test/ui/associated-types/issue-43924.stderr index 9bcedb05ed4..8d4ecac7502 100644 --- a/src/test/ui/associated-types/issue-43924.stderr +++ b/src/test/ui/associated-types/issue-43924.stderr @@ -1,17 +1,17 @@ -error[E0277]: the trait bound `(dyn std::string::ToString + 'static): std::default::Default` is not satisfied +error[E0277]: the trait bound `(dyn ToString + 'static): Default` is not satisfied --> $DIR/issue-43924.rs:7:5 | LL | type Out: Default + ToString + ?Sized = dyn ToString; | ^^^^^^^^^^-------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | | | required by this bound in `Foo::Out` - | the trait `std::default::Default` is not implemented for `(dyn std::string::ToString + 'static)` + | the trait `Default` is not implemented for `(dyn ToString + 'static)` -error[E0599]: no function or associated item named `default` found for trait object `(dyn std::string::ToString + 'static)` in the current scope +error[E0599]: no function or associated item named `default` found for trait object `(dyn ToString + 'static)` in the current scope --> $DIR/issue-43924.rs:14:39 | LL | assert_eq!(<() as Foo>::Out::default().to_string(), "false"); - | ^^^^^^^ function or associated item not found in `(dyn std::string::ToString + 'static)` + | ^^^^^^^ function or associated item not found in `(dyn ToString + 'static)` error: aborting due to 2 previous errors diff --git a/src/test/ui/async-await/async-error-span.stderr b/src/test/ui/async-await/async-error-span.stderr index 8cd0e40c8cf..994bfd33ba4 100644 --- a/src/test/ui/async-await/async-error-span.stderr +++ b/src/test/ui/async-await/async-error-span.stderr @@ -5,7 +5,6 @@ LL | fn get_future() -> impl Future { | ^^^^^^^^^^^^^^^^^^^^^^^^ `()` is not a future | = help: the trait `Future` is not implemented for `()` - = note: the return type of a function must have a statically known size error[E0698]: type inside `async fn` body must be known in this context --> $DIR/async-error-span.rs:13:9 diff --git a/src/test/ui/async-await/issue-61076.stderr b/src/test/ui/async-await/issue-61076.stderr index f1f1b2d4439..88ea7251eaf 100644 --- a/src/test/ui/async-await/issue-61076.stderr +++ b/src/test/ui/async-await/issue-61076.stderr @@ -27,33 +27,18 @@ error[E0609]: no field `0` on type `impl Future` | LL | let _: i32 = tuple().0; | ^ - | -help: consider awaiting before field access - | -LL | let _: i32 = tuple().await.0; - | ^^^^^^ error[E0609]: no field `a` on type `impl Future` --> $DIR/issue-61076.rs:60:28 | LL | let _: i32 = struct_().a; | ^ - | -help: consider awaiting before field access - | -LL | let _: i32 = struct_().await.a; - | ^^^^^^ error[E0599]: no method named `method` found for opaque type `impl Future` in the current scope --> $DIR/issue-61076.rs:62:15 | LL | struct_().method(); | ^^^^^^ method not found in `impl Future` - | -help: consider awaiting before this method call - | -LL | struct_().await.method(); - | ^^^^^^ error[E0308]: mismatched types --> $DIR/issue-61076.rs:69:9 @@ -66,10 +51,6 @@ LL | Tuple(_) => {} | = note: expected opaque type `impl Future` found struct `Tuple` -help: consider awaiting on the future - | -LL | match tuple().await { - | ^^^^^^ error: aborting due to 6 previous errors diff --git a/src/test/ui/async-await/issue-64130-4-async-move.stderr b/src/test/ui/async-await/issue-64130-4-async-move.stderr index f5d023ab781..2d46dfb7269 100644 --- a/src/test/ui/async-await/issue-64130-4-async-move.stderr +++ b/src/test/ui/async-await/issue-64130-4-async-move.stderr @@ -1,17 +1,8 @@ error: future cannot be sent between threads safely --> $DIR/issue-64130-4-async-move.rs:15:17 | -LL | pub fn foo() -> impl Future + Send { - | ^^^^^^^^^^^^^^^^^^ future created by async block is not `Send` -... -LL | / async move { -LL | | match client.status() { -LL | | 200 => { -LL | | let _x = get().await; -... | -LL | | } -LL | | } - | |_____- this returned value is of type `impl Future` +LL | pub fn foo() -> impl Future + Send { + | ^^^^^^^^^^^^^^^^^^ future created by async block is not `Send` | = help: the trait `Sync` is not implemented for `(dyn Any + Send + 'static)` note: future is not `Send` as this value is used across an await diff --git a/src/test/ui/async-await/issue-70818.stderr b/src/test/ui/async-await/issue-70818.stderr index 20ee22e448c..11fca2dd8ef 100644 --- a/src/test/ui/async-await/issue-70818.stderr +++ b/src/test/ui/async-await/issue-70818.stderr @@ -3,9 +3,6 @@ error: future cannot be sent between threads safely | LL | fn foo(ty: T, ty1: U) -> impl Future + Send { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ future created by async block is not `Send` -LL | -LL | async { (ty, ty1) } - | ------------------- this returned value is of type `impl Future` | note: captured value is not `Send` --> $DIR/issue-70818.rs:6:18 diff --git a/src/test/ui/closures/issue-41366.stderr b/src/test/ui/closures/issue-41366.stderr index 97c33c0708e..200d411b511 100644 --- a/src/test/ui/closures/issue-41366.stderr +++ b/src/test/ui/closures/issue-41366.stderr @@ -15,12 +15,12 @@ error[E0277]: the size for values of type `>::V` cannot be known at LL | (&|_| ()) as &dyn for<'x> Fn(>::V); | ^ doesn't have a size known at compile-time | - = help: the trait `std::marker::Sized` is not implemented for `>::V` + = help: the trait `Sized` is not implemented for `>::V` = help: unsized locals are gated as an unstable feature help: consider further restricting the associated type | -LL | fn main() where >::V: std::marker::Sized { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn main() where >::V: Sized { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: function arguments must have a statically known size, borrowed types always have a known size | LL | (&|&_| ()) as &dyn for<'x> Fn(>::V); diff --git a/src/test/ui/conservative_impl_trait.stderr b/src/test/ui/conservative_impl_trait.stderr index 87058c3c29c..63a4df242f8 100644 --- a/src/test/ui/conservative_impl_trait.stderr +++ b/src/test/ui/conservative_impl_trait.stderr @@ -5,7 +5,6 @@ LL | fn will_ice(something: &u32) -> impl Iterator { | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `()` is not an iterator | = help: the trait `Iterator` is not implemented for `()` - = note: the return type of a function must have a statically known size error: aborting due to previous error diff --git a/src/test/ui/feature-gates/feature-gate-associated_type_bounds.rs b/src/test/ui/feature-gates/feature-gate-associated_type_bounds.rs index 7dac2b26cce..38be85ff820 100644 --- a/src/test/ui/feature-gates/feature-gate-associated_type_bounds.rs +++ b/src/test/ui/feature-gates/feature-gate-associated_type_bounds.rs @@ -1,4 +1,3 @@ -// ignore-tidy-linelength // compile-flags: -Zsave-analysis // This is also a regression test for #69415 and the above flag is needed. @@ -15,7 +14,7 @@ impl Tr1 for S1 { type As1 = S2; } trait _Tr3 { type A: Iterator; //~^ ERROR associated type bounds are unstable - //~| ERROR the trait bound `<::A as std::iter::Iterator>::Item: std::marker::Copy` is not satisfied + //~| ERROR the trait bound `<::A as Iterator>::Item: Copy` is not satisfied type B: Iterator; //~^ ERROR associated type bounds are unstable diff --git a/src/test/ui/feature-gates/feature-gate-associated_type_bounds.stderr b/src/test/ui/feature-gates/feature-gate-associated_type_bounds.stderr index 987b6787581..be5d35139b6 100644 --- a/src/test/ui/feature-gates/feature-gate-associated_type_bounds.stderr +++ b/src/test/ui/feature-gates/feature-gate-associated_type_bounds.stderr @@ -1,5 +1,5 @@ error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:16:22 + --> $DIR/feature-gate-associated_type_bounds.rs:15:22 | LL | type A: Iterator; | ^^^^^^^^^^ @@ -8,7 +8,7 @@ LL | type A: Iterator; = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:20:22 + --> $DIR/feature-gate-associated_type_bounds.rs:19:22 | LL | type B: Iterator; | ^^^^^^^^^^^^^ @@ -17,7 +17,7 @@ LL | type B: Iterator; = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:24:20 + --> $DIR/feature-gate-associated_type_bounds.rs:23:20 | LL | struct _St1> { | ^^^^^^^^ @@ -26,7 +26,7 @@ LL | struct _St1> { = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:31:18 + --> $DIR/feature-gate-associated_type_bounds.rs:30:18 | LL | enum _En1> { | ^^^^^^^^ @@ -35,7 +35,7 @@ LL | enum _En1> { = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:38:19 + --> $DIR/feature-gate-associated_type_bounds.rs:37:19 | LL | union _Un1> { | ^^^^^^^^ @@ -44,7 +44,7 @@ LL | union _Un1> { = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:45:37 + --> $DIR/feature-gate-associated_type_bounds.rs:44:37 | LL | type _TaWhere1 where T: Iterator = T; | ^^^^^^^^^^ @@ -53,7 +53,7 @@ LL | type _TaWhere1 where T: Iterator = T; = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:48:22 + --> $DIR/feature-gate-associated_type_bounds.rs:47:22 | LL | fn _apit(_: impl Tr1) {} | ^^^^^^^^^ @@ -62,7 +62,7 @@ LL | fn _apit(_: impl Tr1) {} = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:50:26 + --> $DIR/feature-gate-associated_type_bounds.rs:49:26 | LL | fn _apit_dyn(_: &dyn Tr1) {} | ^^^^^^^^^ @@ -71,7 +71,7 @@ LL | fn _apit_dyn(_: &dyn Tr1) {} = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:53:24 + --> $DIR/feature-gate-associated_type_bounds.rs:52:24 | LL | fn _rpit() -> impl Tr1 { S1 } | ^^^^^^^^^ @@ -80,7 +80,7 @@ LL | fn _rpit() -> impl Tr1 { S1 } = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:56:31 + --> $DIR/feature-gate-associated_type_bounds.rs:55:31 | LL | fn _rpit_dyn() -> Box> { Box::new(S1) } | ^^^^^^^^^ @@ -89,7 +89,7 @@ LL | fn _rpit_dyn() -> Box> { Box::new(S1) } = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:59:23 + --> $DIR/feature-gate-associated_type_bounds.rs:58:23 | LL | const _cdef: impl Tr1 = S1; | ^^^^^^^^^ @@ -98,7 +98,7 @@ LL | const _cdef: impl Tr1 = S1; = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:65:24 + --> $DIR/feature-gate-associated_type_bounds.rs:64:24 | LL | static _sdef: impl Tr1 = S1; | ^^^^^^^^^ @@ -107,7 +107,7 @@ LL | static _sdef: impl Tr1 = S1; = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0658]: associated type bounds are unstable - --> $DIR/feature-gate-associated_type_bounds.rs:72:21 + --> $DIR/feature-gate-associated_type_bounds.rs:71:21 | LL | let _: impl Tr1 = S1; | ^^^^^^^^^ @@ -116,7 +116,7 @@ LL | let _: impl Tr1 = S1; = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable error[E0562]: `impl Trait` not allowed outside of function and inherent method return types - --> $DIR/feature-gate-associated_type_bounds.rs:59:14 + --> $DIR/feature-gate-associated_type_bounds.rs:58:14 | LL | const _cdef: impl Tr1 = S1; | ^^^^^^^^^^^^^^^^^^^ @@ -124,7 +124,7 @@ LL | const _cdef: impl Tr1 = S1; = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error[E0562]: `impl Trait` not allowed outside of function and inherent method return types - --> $DIR/feature-gate-associated_type_bounds.rs:65:15 + --> $DIR/feature-gate-associated_type_bounds.rs:64:15 | LL | static _sdef: impl Tr1 = S1; | ^^^^^^^^^^^^^^^^^^^ @@ -132,28 +132,28 @@ LL | static _sdef: impl Tr1 = S1; = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error[E0562]: `impl Trait` not allowed outside of function and inherent method return types - --> $DIR/feature-gate-associated_type_bounds.rs:72:12 + --> $DIR/feature-gate-associated_type_bounds.rs:71:12 | LL | let _: impl Tr1 = S1; | ^^^^^^^^^^^^^^^^^^^ | = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable -error[E0277]: the trait bound `<::A as std::iter::Iterator>::Item: std::marker::Copy` is not satisfied - --> $DIR/feature-gate-associated_type_bounds.rs:16:28 +error[E0277]: the trait bound `<::A as Iterator>::Item: Copy` is not satisfied + --> $DIR/feature-gate-associated_type_bounds.rs:15:28 | LL | type A: Iterator; - | ^^^^ the trait `std::marker::Copy` is not implemented for `<::A as std::iter::Iterator>::Item` + | ^^^^ the trait `Copy` is not implemented for `<::A as Iterator>::Item` | ::: $SRC_DIR/core/src/marker.rs:LL:COL | LL | pub trait Copy: Clone { - | --------------------- required by this bound in `std::marker::Copy` + | --------------------- required by this bound in `Copy` | help: consider further restricting the associated type | -LL | trait _Tr3 where <::A as std::iter::Iterator>::Item: std::marker::Copy { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | trait _Tr3 where <::A as Iterator>::Item: Copy { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 17 previous errors diff --git a/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs b/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs index 34823cbafd3..1d2be3657ff 100644 --- a/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs +++ b/src/test/ui/feature-gates/feature-gate-generic_associated_types.rs @@ -15,7 +15,7 @@ impl PointerFamily for Foo { //~^ ERROR generic associated types are unstable type Pointer2 = Box; //~^ ERROR generic associated types are unstable - //~| ERROR the trait bound `U32: std::clone::Clone` is not satisfied + //~| ERROR the trait bound `U32: Clone` is not satisfied } trait Bar { diff --git a/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr b/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr index e04a129dbbb..266008cc0de 100644 --- a/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr +++ b/src/test/ui/feature-gates/feature-gate-generic_associated_types.stderr @@ -61,16 +61,16 @@ LL | type Assoc where Self: Sized = Foo; = note: see issue #44265 for more information = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable -error[E0277]: the trait bound `U32: std::clone::Clone` is not satisfied +error[E0277]: the trait bound `U32: Clone` is not satisfied --> $DIR/feature-gate-generic_associated_types.rs:16:5 | LL | type Pointer2 = Box; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::clone::Clone` is not implemented for `U32` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `U32` | help: consider restricting type parameter `U32` | -LL | type Pointer2 = Box; - | ^^^^^^^^^^^^^^^^^^^ +LL | type Pointer2 = Box; + | ^^^^^^^ error: aborting due to 8 previous errors diff --git a/src/test/ui/for/for-c-in-str.rs b/src/test/ui/for/for-c-in-str.rs index 8aca8c388d4..97a4ea53af5 100644 --- a/src/test/ui/for/for-c-in-str.rs +++ b/src/test/ui/for/for-c-in-str.rs @@ -1,16 +1,16 @@ // E0277 should point exclusively at line 6, not the entire for loop span -// ignore-tidy-linelength - fn main() { for c in "asdf" { //~^ ERROR `&str` is not an iterator //~| NOTE `&str` is not an iterator //~| HELP the trait `Iterator` is not implemented for `&str` + //~| NOTE required because of the requirements on the impl of `IntoIterator` for `&str` //~| NOTE required by `into_iter` //~| NOTE in this expansion of desugaring of `for` loop //~| NOTE in this expansion of desugaring of `for` loop //~| NOTE in this expansion of desugaring of `for` loop + //~| NOTE in this expansion of desugaring of `for` loop println!(); } } diff --git a/src/test/ui/for/for-c-in-str.stderr b/src/test/ui/for/for-c-in-str.stderr index f991e08e518..18e46e1d7de 100644 --- a/src/test/ui/for/for-c-in-str.stderr +++ b/src/test/ui/for/for-c-in-str.stderr @@ -1,10 +1,11 @@ error[E0277]: `&str` is not an iterator - --> $DIR/for-c-in-str.rs:6:14 + --> $DIR/for-c-in-str.rs:4:14 | LL | for c in "asdf" { | ^^^^^^ `&str` is not an iterator; try calling `.chars()` or `.bytes()` | = help: the trait `Iterator` is not implemented for `&str` + = note: required because of the requirements on the impl of `IntoIterator` for `&str` = note: required by `into_iter` error: aborting due to previous error diff --git a/src/test/ui/for/for-loop-bogosity.stderr b/src/test/ui/for/for-loop-bogosity.stderr index ccacd655a14..0d940962689 100644 --- a/src/test/ui/for/for-loop-bogosity.stderr +++ b/src/test/ui/for/for-loop-bogosity.stderr @@ -5,6 +5,7 @@ LL | for x in bogus { | ^^^^^ `MyStruct` is not an iterator | = help: the trait `Iterator` is not implemented for `MyStruct` + = note: required because of the requirements on the impl of `IntoIterator` for `MyStruct` = note: required by `into_iter` error: aborting due to previous error diff --git a/src/test/ui/generator/sized-yield.stderr b/src/test/ui/generator/sized-yield.stderr index 19658528a0b..8e3c2f67ed1 100644 --- a/src/test/ui/generator/sized-yield.stderr +++ b/src/test/ui/generator/sized-yield.stderr @@ -20,7 +20,7 @@ LL | Pin::new(&mut gen).resume(()); ::: $SRC_DIR/core/src/ops/generator.rs:LL:COL | LL | pub enum GeneratorState { - | - required by this bound in `std::ops::GeneratorState` + | - required by this bound in `GeneratorState` | = help: the trait `Sized` is not implemented for `str` diff --git a/src/test/ui/generic-associated-types/cross-crate-bounds.rs b/src/test/ui/generic-associated-types/cross-crate-bounds.rs index 4e2bab38c88..8934a07fd4e 100644 --- a/src/test/ui/generic-associated-types/cross-crate-bounds.rs +++ b/src/test/ui/generic-associated-types/cross-crate-bounds.rs @@ -13,7 +13,7 @@ pub struct FooImpl; impl Foo for FooImpl { type Bar = (); - //~^ ERROR the trait bound `(): std::convert::AsRef<()>` is not satisfied + //~^ ERROR the trait bound `(): AsRef<()>` is not satisfied fn foo(&self) -> Pin + '_>> { panic!() } diff --git a/src/test/ui/generic-associated-types/cross-crate-bounds.stderr b/src/test/ui/generic-associated-types/cross-crate-bounds.stderr index 5fd2750868f..d96c5f4540e 100644 --- a/src/test/ui/generic-associated-types/cross-crate-bounds.stderr +++ b/src/test/ui/generic-associated-types/cross-crate-bounds.stderr @@ -1,8 +1,8 @@ -error[E0277]: the trait bound `(): std::convert::AsRef<()>` is not satisfied +error[E0277]: the trait bound `(): AsRef<()>` is not satisfied --> $DIR/cross-crate-bounds.rs:15:5 | LL | type Bar = (); - | ^^^^^^^^^^^^^^ the trait `std::convert::AsRef<()>` is not implemented for `()` + | ^^^^^^^^^^^^^^ the trait `AsRef<()>` is not implemented for `()` | ::: $DIR/auxiliary/foo_defn.rs:6:15 | diff --git a/src/test/ui/generic-associated-types/impl_bounds.stderr b/src/test/ui/generic-associated-types/impl_bounds.stderr index e6f27a45a3c..645d2927145 100644 --- a/src/test/ui/generic-associated-types/impl_bounds.stderr +++ b/src/test/ui/generic-associated-types/impl_bounds.stderr @@ -24,8 +24,25 @@ note: but lifetime parameter must outlive the lifetime `'a` as defined on the as LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ()); | ^^ +error[E0478]: lifetime bound not satisfied + --> $DIR/impl_bounds.rs:17:5 + | +LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ()); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: lifetime parameter instantiated with the lifetime `'a` as defined on the associated item at 17:12 + --> $DIR/impl_bounds.rs:17:12 + | +LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ()); + | ^^ +note: but lifetime parameter must outlive the lifetime `'b` as defined on the associated item at 17:16 + --> $DIR/impl_bounds.rs:17:16 + | +LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ()); + | ^^ + error[E0277]: the trait bound `T: Copy` is not satisfied - --> $DIR/impl_bounds.rs:19:5 + --> $DIR/impl_bounds.rs:20:5 | LL | type C where Self: Copy = String; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `T` diff --git a/src/test/ui/generic-associated-types/projection-bound-cycle-generic.rs b/src/test/ui/generic-associated-types/projection-bound-cycle-generic.rs index c88fb8ad96e..0cd676a9b37 100644 --- a/src/test/ui/generic-associated-types/projection-bound-cycle-generic.rs +++ b/src/test/ui/generic-associated-types/projection-bound-cycle-generic.rs @@ -43,7 +43,7 @@ impl Bar for T where T: Foo { // can use the bound on `Foo::Item` for this, but that requires // `wf(::Item)`, which is an invalid cycle. type Assoc = OnlySized<::Item>; - //~^ ERROR overflow evaluating the requirement `::Item: std::marker::Sized` + //~^ ERROR overflow evaluating the requirement `::Item: Sized` } fn foo() { diff --git a/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr b/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr index 5967752ef79..d27e46f6836 100644 --- a/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr +++ b/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr @@ -7,7 +7,7 @@ LL | #![feature(generic_associated_types)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #44265 for more information -error[E0275]: overflow evaluating the requirement `::Item: std::marker::Sized` +error[E0275]: overflow evaluating the requirement `::Item: Sized` --> $DIR/projection-bound-cycle-generic.rs:45:5 | LL | struct OnlySized where T: Sized { f: T } diff --git a/src/test/ui/generic-associated-types/projection-bound-cycle.rs b/src/test/ui/generic-associated-types/projection-bound-cycle.rs index 0728dc1bcbc..5043fe5c08f 100644 --- a/src/test/ui/generic-associated-types/projection-bound-cycle.rs +++ b/src/test/ui/generic-associated-types/projection-bound-cycle.rs @@ -45,7 +45,7 @@ impl Bar for T where T: Foo { // can use the bound on `Foo::Item` for this, but that requires // `wf(::Item)`, which is an invalid cycle. type Assoc = OnlySized<::Item>; - //~^ ERROR overflow evaluating the requirement `::Item: std::marker::Sized` + //~^ ERROR overflow evaluating the requirement `::Item: Sized` } fn foo() { diff --git a/src/test/ui/generic-associated-types/projection-bound-cycle.stderr b/src/test/ui/generic-associated-types/projection-bound-cycle.stderr index 80d102013a7..400b664f97c 100644 --- a/src/test/ui/generic-associated-types/projection-bound-cycle.stderr +++ b/src/test/ui/generic-associated-types/projection-bound-cycle.stderr @@ -7,7 +7,7 @@ LL | #![feature(generic_associated_types)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #44265 for more information -error[E0275]: overflow evaluating the requirement `::Item: std::marker::Sized` +error[E0275]: overflow evaluating the requirement `::Item: Sized` --> $DIR/projection-bound-cycle.rs:47:5 | LL | struct OnlySized where T: Sized { f: T } diff --git a/src/test/ui/impl-trait/issue-55872-2.stderr b/src/test/ui/impl-trait/issue-55872-2.stderr index 6da3704184a..58c5ee45051 100644 --- a/src/test/ui/impl-trait/issue-55872-2.stderr +++ b/src/test/ui/impl-trait/issue-55872-2.stderr @@ -3,8 +3,6 @@ error[E0277]: the trait bound `impl Future: Copy` is not satisfied | LL | type E = impl std::marker::Copy; | ^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `impl Future` - | - = note: the return type of a function must have a statically known size error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias --> $DIR/issue-55872-2.rs:15:28 diff --git a/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr b/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr index ec03d18924f..2f630c2c9ad 100644 --- a/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr +++ b/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr @@ -7,7 +7,7 @@ LL | #![feature(impl_trait_in_bindings)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #63065 for more information -error[E0282]: type annotations needed for `impl std::future::Future` +error[E0282]: type annotations needed for `impl Future` --> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:13:20 | LL | let fut = async { diff --git a/src/test/ui/issues-71798.stderr b/src/test/ui/issues-71798.stderr index 835d479f28f..bbcdd3e37a9 100644 --- a/src/test/ui/issues-71798.stderr +++ b/src/test/ui/issues-71798.stderr @@ -11,7 +11,6 @@ LL | fn test_ref(x: &u32) -> impl std::future::Future + '_ { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `u32` is not a future | = help: the trait `Future` is not implemented for `u32` - = note: the return type of a function must have a statically known size error: aborting due to 2 previous errors diff --git a/src/test/ui/issues/issue-20605.stderr b/src/test/ui/issues/issue-20605.stderr index 25fa575fc60..9940f43cc44 100644 --- a/src/test/ui/issues/issue-20605.stderr +++ b/src/test/ui/issues/issue-20605.stderr @@ -4,9 +4,9 @@ error[E0277]: the size for values of type `dyn Iterator` cann LL | for item in *things { *item = 0 } | ^^^^^^^ doesn't have a size known at compile-time | - = help: the trait `std::marker::Sized` is not implemented for `dyn std::iter::Iterator` - = note: required because of the requirements on the impl of `std::iter::IntoIterator` for `dyn std::iter::Iterator` - = note: required by `std::iter::IntoIterator::into_iter` + = help: the trait `Sized` is not implemented for `dyn Iterator` + = note: required because of the requirements on the impl of `IntoIterator` for `dyn Iterator` + = note: required by `into_iter` error: aborting due to previous error diff --git a/src/test/ui/issues/issue-20831-debruijn.stderr b/src/test/ui/issues/issue-20831-debruijn.stderr index 1764dd3cf67..bcfb6b70b2e 100644 --- a/src/test/ui/issues/issue-20831-debruijn.stderr +++ b/src/test/ui/issues/issue-20831-debruijn.stderr @@ -7,14 +7,8 @@ LL | fn subscribe(&mut self, t : Box $DIR/issue-20831-debruijn.rs:28:5 | -LL | / fn subscribe(&mut self, t : Box::Output> + 'a>) { -LL | | // Not obvious, but there is an implicit lifetime here -------^ -LL | | -LL | | // -... | -LL | | self.sub = t; -LL | | } - | |_____^ +LL | fn subscribe(&mut self, t : Box::Output> + 'a>) { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ note: ...but the lifetime must also be valid for the lifetime `'a` as defined on the impl at 26:6... --> $DIR/issue-20831-debruijn.rs:26:6 | diff --git a/src/test/ui/issues/issue-23122-2.stderr b/src/test/ui/issues/issue-23122-2.stderr index 0d645bbcea5..7ed04519b69 100644 --- a/src/test/ui/issues/issue-23122-2.stderr +++ b/src/test/ui/issues/issue-23122-2.stderr @@ -1,4 +1,4 @@ -error[E0275]: overflow evaluating the requirement `<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::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: std::marker::Sized` +error[E0275]: overflow evaluating the requirement `<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::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: Sized` --> $DIR/issue-23122-2.rs:8:5 | LL | type Next = as Next>::Next; diff --git a/src/test/ui/issues/issue-28098.stderr b/src/test/ui/issues/issue-28098.stderr index 04075911111..4c927a0cb45 100644 --- a/src/test/ui/issues/issue-28098.stderr +++ b/src/test/ui/issues/issue-28098.stderr @@ -13,9 +13,9 @@ error[E0277]: `bool` is not an iterator LL | for _ in false {} | ^^^^^ `bool` is not an iterator | - = help: the trait `std::iter::Iterator` is not implemented for `bool` - = note: required because of the requirements on the impl of `std::iter::IntoIterator` for `bool` - = note: required by `std::iter::IntoIterator::into_iter` + = help: the trait `Iterator` is not implemented for `bool` + = note: required because of the requirements on the impl of `IntoIterator` for `bool` + = note: required by `into_iter` error[E0277]: `()` is not an iterator --> $DIR/issue-28098.rs:9:28 @@ -59,6 +59,7 @@ LL | for _ in false {} | ^^^^^ `bool` is not an iterator | = help: the trait `Iterator` is not implemented for `bool` + = note: required because of the requirements on the impl of `IntoIterator` for `bool` = note: required by `into_iter` error[E0277]: `()` is not an iterator diff --git a/src/test/ui/issues/issue-33941.stderr b/src/test/ui/issues/issue-33941.stderr index 81d97bdbf12..e91dae08b3a 100644 --- a/src/test/ui/issues/issue-33941.stderr +++ b/src/test/ui/issues/issue-33941.stderr @@ -15,9 +15,9 @@ LL | for _ in HashMap::new().iter().cloned() {} | = note: expected tuple `(&_, &_)` found reference `&_` - = note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Cloned>` - = note: required because of the requirements on the impl of `std::iter::IntoIterator` for `std::iter::Cloned>` - = note: required by `std::iter::IntoIterator::into_iter` + = note: required because of the requirements on the impl of `Iterator` for `Cloned>` + = note: required because of the requirements on the impl of `IntoIterator` for `Cloned>` + = note: required by `into_iter` error[E0271]: type mismatch resolving ` as Iterator>::Item == &_` --> $DIR/issue-33941.rs:4:14 @@ -28,6 +28,7 @@ LL | for _ in HashMap::new().iter().cloned() {} = note: expected tuple `(&_, &_)` found reference `&_` = note: required because of the requirements on the impl of `Iterator` for `Cloned>` + = note: required by `std::iter::Iterator::next` error: aborting due to 3 previous errors diff --git a/src/test/ui/issues/issue-41139.rs b/src/test/ui/issues/issue-41139.rs index ebdc5cb6dbe..94c53216f50 100644 --- a/src/test/ui/issues/issue-41139.rs +++ b/src/test/ui/issues/issue-41139.rs @@ -1,10 +1,12 @@ trait Trait {} -fn get_function<'a>() -> &'a dyn Fn() -> dyn Trait { panic!("") } +fn get_function<'a>() -> &'a dyn Fn() -> dyn Trait { + panic!("") +} fn main() { // This isn't great. The issue here is that `dyn Trait` is not sized, so // `dyn Fn() -> dyn Trait` is not well-formed. - let t : &dyn Trait = &get_function()(); - //~^ ERROR expected function, found `&dyn std::ops::Fn() -> (dyn Trait + 'static)` + let t: &dyn Trait = &get_function()(); + //~^ ERROR expected function, found `&dyn Fn() -> (dyn Trait + 'static)` } diff --git a/src/test/ui/issues/issue-41139.stderr b/src/test/ui/issues/issue-41139.stderr index 083c413c316..48b22bca20f 100644 --- a/src/test/ui/issues/issue-41139.stderr +++ b/src/test/ui/issues/issue-41139.stderr @@ -1,13 +1,13 @@ -error[E0618]: expected function, found `&dyn std::ops::Fn() -> (dyn Trait + 'static)` - --> $DIR/issue-41139.rs:8:27 +error[E0618]: expected function, found `&dyn Fn() -> (dyn Trait + 'static)` + --> $DIR/issue-41139.rs:10:26 | -LL | fn get_function<'a>() -> &'a dyn Fn() -> dyn Trait { panic!("") } - | ----------------------------------------------------------------- `get_function` defined here returns `&dyn std::ops::Fn() -> (dyn Trait + 'static)` +LL | fn get_function<'a>() -> &'a dyn Fn() -> dyn Trait { + | -------------------------------------------------- `get_function` defined here returns `&dyn Fn() -> (dyn Trait + 'static)` ... -LL | let t : &dyn Trait = &get_function()(); - | ^^^^^^^^^^^^^^-- - | | - | call expression requires function +LL | let t: &dyn Trait = &get_function()(); + | ^^^^^^^^^^^^^^-- + | | + | call expression requires function error: aborting due to previous error diff --git a/src/test/ui/issues/issue-43784-associated-type.stderr b/src/test/ui/issues/issue-43784-associated-type.stderr index 7b656ef8559..d5105ae3b58 100644 --- a/src/test/ui/issues/issue-43784-associated-type.stderr +++ b/src/test/ui/issues/issue-43784-associated-type.stderr @@ -1,11 +1,11 @@ -error[E0277]: the trait bound `T: std::marker::Copy` is not satisfied +error[E0277]: the trait bound `T: Copy` is not satisfied --> $DIR/issue-43784-associated-type.rs:14:5 | LL | type Assoc: Partial; | ------------- required by this bound in `Complete::Assoc` ... LL | type Assoc = T; - | ^^^^^^^^^^^^^^^ the trait `std::marker::Copy` is not implemented for `T` + | ^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `T` | help: consider restricting type parameter `T` | diff --git a/src/test/ui/issues/issue-60283.stderr b/src/test/ui/issues/issue-60283.stderr index 80f118e12c4..650570b6471 100644 --- a/src/test/ui/issues/issue-60283.stderr +++ b/src/test/ui/issues/issue-60283.stderr @@ -24,11 +24,11 @@ LL | foo((), drop) LL | pub fn drop(_x: T) {} | - required by this bound in `std::mem::drop` | - = help: the trait `std::marker::Sized` is not implemented for `<() as Trait<'_>>::Item` + = help: the trait `Sized` is not implemented for `<() as Trait<'_>>::Item` help: consider further restricting the associated type | -LL | fn main() where <() as Trait<'_>>::Item: std::marker::Sized { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn main() where <() as Trait<'_>>::Item: Sized { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 2 previous errors diff --git a/src/test/ui/iterators/array-of-ranges.stderr b/src/test/ui/iterators/array-of-ranges.stderr index 6271d8107bc..601983a6153 100644 --- a/src/test/ui/iterators/array-of-ranges.stderr +++ b/src/test/ui/iterators/array-of-ranges.stderr @@ -6,6 +6,7 @@ LL | for _ in [0..1] {} | = help: the trait `Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]` = note: `[start..end]` is an array of one `Range`; you might have meant to have a `Range` without the brackets: `start..end` + = note: required because of the requirements on the impl of `IntoIterator` for `[std::ops::Range<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[RangeInclusive<{integer}>; 1]` is not an iterator @@ -16,6 +17,7 @@ LL | for _ in [0..=1] {} | = help: the trait `Iterator` is not implemented for `[RangeInclusive<{integer}>; 1]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[RangeInclusive<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[RangeFrom<{integer}>; 1]` is not an iterator @@ -26,6 +28,7 @@ LL | for _ in [0..] {} | = help: the trait `Iterator` is not implemented for `[RangeFrom<{integer}>; 1]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[RangeFrom<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[RangeTo<{integer}>; 1]` is not an iterator @@ -36,6 +39,7 @@ LL | for _ in [..1] {} | = help: the trait `Iterator` is not implemented for `[RangeTo<{integer}>; 1]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[RangeTo<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[RangeToInclusive<{integer}>; 1]` is not an iterator @@ -46,6 +50,7 @@ LL | for _ in [..=1] {} | = help: the trait `Iterator` is not implemented for `[RangeToInclusive<{integer}>; 1]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[RangeToInclusive<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[std::ops::Range<{integer}>; 1]` is not an iterator @@ -56,6 +61,7 @@ LL | for _ in [start..end] {} | = help: the trait `Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]` = note: `[start..end]` is an array of one `Range`; you might have meant to have a `Range` without the brackets: `start..end` + = note: required because of the requirements on the impl of `IntoIterator` for `[std::ops::Range<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[std::ops::Range<{integer}>; 1]` is not an iterator @@ -66,6 +72,7 @@ LL | for _ in array_of_range {} | = help: the trait `Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]` = note: `[start..end]` is an array of one `Range`; you might have meant to have a `Range` without the brackets: `start..end` + = note: required because of the requirements on the impl of `IntoIterator` for `[std::ops::Range<{integer}>; 1]` = note: required by `into_iter` error[E0277]: `[std::ops::Range<{integer}>; 2]` is not an iterator @@ -76,6 +83,7 @@ LL | for _ in [0..1, 2..3] {} | = help: the trait `Iterator` is not implemented for `[std::ops::Range<{integer}>; 2]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[std::ops::Range<{integer}>; 2]` = note: required by `into_iter` error[E0277]: `[RangeInclusive<{integer}>; 1]` is not an iterator @@ -86,6 +94,7 @@ LL | for _ in [0..=1] {} | = help: the trait `Iterator` is not implemented for `[RangeInclusive<{integer}>; 1]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[RangeInclusive<{integer}>; 1]` = note: required by `into_iter` error: aborting due to 9 previous errors diff --git a/src/test/ui/iterators/array.stderr b/src/test/ui/iterators/array.stderr index f86c82e4917..68c6de5493f 100644 --- a/src/test/ui/iterators/array.stderr +++ b/src/test/ui/iterators/array.stderr @@ -6,6 +6,7 @@ LL | for _ in [1, 2] {} | = help: the trait `Iterator` is not implemented for `[{integer}; 2]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[{integer}; 2]` = note: required by `into_iter` error[E0277]: `[{integer}; 2]` is not an iterator @@ -16,6 +17,7 @@ LL | for _ in x {} | = help: the trait `Iterator` is not implemented for `[{integer}; 2]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[{integer}; 2]` = note: required by `into_iter` error[E0277]: `[{float}; 2]` is not an iterator @@ -26,6 +28,7 @@ LL | for _ in [1.0, 2.0] {} | = help: the trait `Iterator` is not implemented for `[{float}; 2]` = note: arrays are not iterators, but slices like the following are: `&[1, 2, 3]` + = note: required because of the requirements on the impl of `IntoIterator` for `[{float}; 2]` = note: required by `into_iter` error: aborting due to 3 previous errors diff --git a/src/test/ui/iterators/integral.stderr b/src/test/ui/iterators/integral.stderr index c4c46412611..e31ee59785c 100644 --- a/src/test/ui/iterators/integral.stderr +++ b/src/test/ui/iterators/integral.stderr @@ -6,6 +6,7 @@ LL | for _ in 42 {} | = help: the trait `Iterator` is not implemented for `{integer}` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `{integer}` = note: required by `into_iter` error[E0277]: `u8` is not an iterator @@ -16,6 +17,7 @@ LL | for _ in 42 as u8 {} | = help: the trait `Iterator` is not implemented for `u8` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `u8` = note: required by `into_iter` error[E0277]: `i8` is not an iterator @@ -26,6 +28,7 @@ LL | for _ in 42 as i8 {} | = help: the trait `Iterator` is not implemented for `i8` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `i8` = note: required by `into_iter` error[E0277]: `u16` is not an iterator @@ -36,6 +39,7 @@ LL | for _ in 42 as u16 {} | = help: the trait `Iterator` is not implemented for `u16` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `u16` = note: required by `into_iter` error[E0277]: `i16` is not an iterator @@ -46,6 +50,7 @@ LL | for _ in 42 as i16 {} | = help: the trait `Iterator` is not implemented for `i16` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `i16` = note: required by `into_iter` error[E0277]: `u32` is not an iterator @@ -56,6 +61,7 @@ LL | for _ in 42 as u32 {} | = help: the trait `Iterator` is not implemented for `u32` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `u32` = note: required by `into_iter` error[E0277]: `i32` is not an iterator @@ -66,6 +72,7 @@ LL | for _ in 42 as i32 {} | = help: the trait `Iterator` is not implemented for `i32` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `i32` = note: required by `into_iter` error[E0277]: `u64` is not an iterator @@ -76,6 +83,7 @@ LL | for _ in 42 as u64 {} | = help: the trait `Iterator` is not implemented for `u64` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `u64` = note: required by `into_iter` error[E0277]: `i64` is not an iterator @@ -86,6 +94,7 @@ LL | for _ in 42 as i64 {} | = help: the trait `Iterator` is not implemented for `i64` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `i64` = note: required by `into_iter` error[E0277]: `usize` is not an iterator @@ -96,6 +105,7 @@ LL | for _ in 42 as usize {} | = help: the trait `Iterator` is not implemented for `usize` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `usize` = note: required by `into_iter` error[E0277]: `isize` is not an iterator @@ -106,6 +116,7 @@ LL | for _ in 42 as isize {} | = help: the trait `Iterator` is not implemented for `isize` = note: if you want to iterate between `start` until a value `end`, use the exclusive range syntax `start..end` or the inclusive range syntax `start..=end` + = note: required because of the requirements on the impl of `IntoIterator` for `isize` = note: required by `into_iter` error[E0277]: `{float}` is not an iterator @@ -115,6 +126,7 @@ LL | for _ in 42.0 {} | ^^^^ `{float}` is not an iterator | = help: the trait `Iterator` is not implemented for `{float}` + = note: required because of the requirements on the impl of `IntoIterator` for `{float}` = note: required by `into_iter` error: aborting due to 12 previous errors diff --git a/src/test/ui/iterators/ranges.stderr b/src/test/ui/iterators/ranges.stderr index 0324d5f1a92..4678bafd196 100644 --- a/src/test/ui/iterators/ranges.stderr +++ b/src/test/ui/iterators/ranges.stderr @@ -5,6 +5,7 @@ LL | for _ in ..10 {} | ^^^^ `RangeTo<{integer}>` is not an iterator | = help: the trait `Iterator` is not implemented for `RangeTo<{integer}>` + = note: required because of the requirements on the impl of `IntoIterator` for `RangeTo<{integer}>` = note: required by `into_iter` error[E0277]: `RangeToInclusive<{integer}>` is not an iterator @@ -14,6 +15,7 @@ LL | for _ in ..=10 {} | ^^^^^ `RangeToInclusive<{integer}>` is not an iterator | = help: the trait `Iterator` is not implemented for `RangeToInclusive<{integer}>` + = note: required because of the requirements on the impl of `IntoIterator` for `RangeToInclusive<{integer}>` = note: required by `into_iter` error: aborting due to 2 previous errors diff --git a/src/test/ui/iterators/string.stderr b/src/test/ui/iterators/string.stderr index fecdbd1785f..16530066824 100644 --- a/src/test/ui/iterators/string.stderr +++ b/src/test/ui/iterators/string.stderr @@ -5,6 +5,7 @@ LL | for _ in "".to_owned() {} | ^^^^^^^^^^^^^ `String` is not an iterator | = help: the trait `Iterator` is not implemented for `String` + = note: required because of the requirements on the impl of `IntoIterator` for `String` = note: required by `into_iter` error[E0277]: `&str` is not an iterator @@ -14,6 +15,7 @@ LL | for _ in "" {} | ^^ `&str` is not an iterator; try calling `.chars()` or `.bytes()` | = help: the trait `Iterator` is not implemented for `&str` + = note: required because of the requirements on the impl of `IntoIterator` for `&str` = note: required by `into_iter` error: aborting due to 2 previous errors diff --git a/src/test/ui/parser/struct-literal-in-for.stderr b/src/test/ui/parser/struct-literal-in-for.stderr index 42f5f1e7e73..fe9c113710c 100644 --- a/src/test/ui/parser/struct-literal-in-for.stderr +++ b/src/test/ui/parser/struct-literal-in-for.stderr @@ -24,6 +24,7 @@ LL | | }.hi() { | |__________^ `bool` is not an iterator | = help: the trait `Iterator` is not implemented for `bool` + = note: required because of the requirements on the impl of `IntoIterator` for `bool` = note: required by `into_iter` error: aborting due to 2 previous errors diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.rs b/src/test/ui/privacy/private-in-public-assoc-ty.rs index fdf0bc38391..fba72c13170 100644 --- a/src/test/ui/privacy/private-in-public-assoc-ty.rs +++ b/src/test/ui/privacy/private-in-public-assoc-ty.rs @@ -21,18 +21,14 @@ mod m { // "Private-in-public in associated types is hard error" in RFC 2145 // applies only to the aliased types, not bounds. pub trait PubTr { + type Alias1: PrivTr; //~^ WARN private trait `PrivTr` in public interface //~| WARN this was previously accepted - //~| WARN private type `Priv` in public interface - //~| WARN private type `Priv` in public interface - //~| WARN this was previously accepted - //~| WARN this was previously accepted - type Alias1: PrivTr; type Alias2: PubTrAux1 = u8; - //~^ WARN private type `m::Priv` in public interface + //~^ WARN private type `Priv` in public interface //~| WARN this was previously accepted type Alias3: PubTrAux2 = u8; - //~^ WARN private type `m::Priv` in public interface + //~^ WARN private type `Priv` in public interface //~| WARN this was previously accepted type Alias4 = Priv; diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.stderr b/src/test/ui/privacy/private-in-public-assoc-ty.stderr index 768dca17e07..430be143f91 100644 --- a/src/test/ui/privacy/private-in-public-assoc-ty.stderr +++ b/src/test/ui/privacy/private-in-public-assoc-ty.stderr @@ -8,7 +8,7 @@ LL | type A = Priv; | ^^^^^^^^^^^^^^ can't leak private type warning: private trait `PrivTr` in public interface (error E0445) - --> $DIR/private-in-public-assoc-ty.rs:23:5 + --> $DIR/private-in-public-assoc-ty.rs:24:9 | LL | type Alias1: PrivTr; | ^^^^^^^^^^^^^^^^^^^^ @@ -18,7 +18,7 @@ LL | type Alias1: PrivTr; = note: for more information, see issue #34537 warning: private type `Priv` in public interface (error E0446) - --> $DIR/private-in-public-assoc-ty.rs:23:5 + --> $DIR/private-in-public-assoc-ty.rs:27:9 | LL | type Alias2: PubTrAux1 = u8; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -27,7 +27,7 @@ LL | type Alias2: PubTrAux1 = u8; = note: for more information, see issue #34537 warning: private type `Priv` in public interface (error E0446) - --> $DIR/private-in-public-assoc-ty.rs:23:5 + --> $DIR/private-in-public-assoc-ty.rs:30:9 | LL | type Alias3: PubTrAux2 = u8; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs b/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs index 5476e35b5f6..f926eee9d92 100644 --- a/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs +++ b/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs @@ -32,9 +32,8 @@ impl PublicType { pub trait MyPubTrait { type Foo: OtherTrait; - //~^ ERROR trait `priv_dep::OtherTrait` from private dependency 'priv_dep' in public interface } -//~^^^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface +//~^^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface pub struct AllowedPrivType { #[allow(exported_private_dependencies)] diff --git a/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr b/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr index e6fd6fc7bb8..e6b4d33f103 100644 --- a/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr +++ b/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr @@ -17,7 +17,7 @@ LL | pub fn pub_fn(param: OtherType) {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: trait `OtherTrait` from private dependency 'priv_dep' in public interface - --> $DIR/pub-priv1.rs:33:1 + --> $DIR/pub-priv1.rs:34:5 | LL | type Foo: OtherTrait; | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/question-mark-type-infer.stderr b/src/test/ui/question-mark-type-infer.stderr index a896d587533..381959b7ae4 100644 --- a/src/test/ui/question-mark-type-infer.stderr +++ b/src/test/ui/question-mark-type-infer.stderr @@ -4,7 +4,8 @@ error[E0283]: type annotations needed LL | l.iter().map(f).collect()? | ^^^^^^^ cannot infer type | - = note: cannot satisfy `<_ as Try>::Ok == _` + = note: cannot satisfy `_: Try` + = note: required by `into_result` help: consider specifying the type argument in the method call | LL | l.iter().map(f).collect::()? diff --git a/src/test/ui/range/range-1.stderr b/src/test/ui/range/range-1.stderr index e380e5b2f91..2cebffec990 100644 --- a/src/test/ui/range/range-1.stderr +++ b/src/test/ui/range/range-1.stderr @@ -11,13 +11,15 @@ LL | for i in false..true {} | ^^^^^^^^^^^ the trait `Step` is not implemented for `bool` | = note: required because of the requirements on the impl of `Iterator` for `std::ops::Range` + = note: required because of the requirements on the impl of `IntoIterator` for `std::ops::Range` + = note: required by `into_iter` error[E0277]: the size for values of type `[{integer}]` cannot be known at compilation time --> $DIR/range-1.rs:14:17 | LL | let range = *arr..; | ^^^^^^ doesn't have a size known at compile-time - | + | ::: $SRC_DIR/core/src/ops/range.rs:LL:COL | LL | pub struct RangeFrom { diff --git a/src/test/ui/regions/regions-normalize-in-where-clause-list.stderr b/src/test/ui/regions/regions-normalize-in-where-clause-list.stderr index 24bf64261e9..ddb2b31ce10 100644 --- a/src/test/ui/regions/regions-normalize-in-where-clause-list.stderr +++ b/src/test/ui/regions/regions-normalize-in-where-clause-list.stderr @@ -4,8 +4,9 @@ error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` d LL | / fn bar<'a, 'b>() LL | | LL | | -LL | | where <() as Project<'a, 'b>>::Item : Eq - | |____________________________________________^ +LL | | where +LL | | <() as Project<'a, 'b>>::Item: Eq, + | |______________________________________^ | note: first, the lifetime cannot outlive the lifetime `'a` as defined on the function body at 24:8... --> $DIR/regions-normalize-in-where-clause-list.rs:24:8 @@ -23,43 +24,14 @@ note: ...so that the types are compatible LL | / fn bar<'a, 'b>() LL | | LL | | -LL | | where <() as Project<'a, 'b>>::Item : Eq - | |____________________________________________^ +LL | | where +LL | | <() as Project<'a, 'b>>::Item: Eq, + | |______________________________________^ = note: expected `Project<'a, 'b>` found `Project<'_, '_>` error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements - --> $DIR/regions-normalize-in-where-clause-list.rs:22:1 - | -LL | / fn bar<'a, 'b>() -LL | | -LL | | -LL | | where <() as Project<'a, 'b>>::Item : Eq - | |____________________________________________^ - | -note: first, the lifetime cannot outlive the lifetime `'a` as defined on the function body at 22:8... - --> $DIR/regions-normalize-in-where-clause-list.rs:22:8 - | -LL | fn bar<'a, 'b>() - | ^^ -note: ...but the lifetime must also be valid for the lifetime `'b` as defined on the function body at 22:12... - --> $DIR/regions-normalize-in-where-clause-list.rs:22:12 - | -LL | fn bar<'a, 'b>() - | ^^ -note: ...so that the types are compatible - --> $DIR/regions-normalize-in-where-clause-list.rs:22:1 - | -LL | / fn bar<'a, 'b>() -LL | | -LL | | -LL | | where <() as Project<'a, 'b>>::Item : Eq - | |____________________________________________^ - = note: expected `Project<'a, 'b>` - found `Project<'_, '_>` - -error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements - --> $DIR/regions-normalize-in-where-clause-list.rs:22:4 + --> $DIR/regions-normalize-in-where-clause-list.rs:24:4 | LL | fn bar<'a, 'b>() | ^^^ diff --git a/src/test/ui/suggestions/suggest-remove-refs-1.stderr b/src/test/ui/suggestions/suggest-remove-refs-1.stderr index 0dd1b2a59eb..4aa0ad219cf 100644 --- a/src/test/ui/suggestions/suggest-remove-refs-1.stderr +++ b/src/test/ui/suggestions/suggest-remove-refs-1.stderr @@ -8,6 +8,7 @@ LL | for (i, _) in &v.iter().enumerate() { | help: consider removing the leading `&`-reference | = help: the trait `Iterator` is not implemented for `&Enumerate>` + = note: required because of the requirements on the impl of `IntoIterator` for `&Enumerate>` = note: required by `into_iter` error: aborting due to previous error diff --git a/src/test/ui/suggestions/suggest-remove-refs-2.stderr b/src/test/ui/suggestions/suggest-remove-refs-2.stderr index 5c2efdb197f..15c4b7fcb8b 100644 --- a/src/test/ui/suggestions/suggest-remove-refs-2.stderr +++ b/src/test/ui/suggestions/suggest-remove-refs-2.stderr @@ -8,6 +8,7 @@ LL | for (i, _) in & & & & &v.iter().enumerate() { | help: consider removing 5 leading `&`-references | = help: the trait `Iterator` is not implemented for `&&&&&Enumerate>` + = note: required because of the requirements on the impl of `IntoIterator` for `&&&&&Enumerate>` = note: required by `into_iter` error: aborting due to previous error diff --git a/src/test/ui/suggestions/suggest-remove-refs-3.stderr b/src/test/ui/suggestions/suggest-remove-refs-3.stderr index c7fbd3d9bd9..0bd6d956aff 100644 --- a/src/test/ui/suggestions/suggest-remove-refs-3.stderr +++ b/src/test/ui/suggestions/suggest-remove-refs-3.stderr @@ -12,6 +12,7 @@ LL | | .enumerate() { | |_____________________^ `&&&&&Enumerate>` is not an iterator | = help: the trait `Iterator` is not implemented for `&&&&&Enumerate>` + = note: required because of the requirements on the impl of `IntoIterator` for `&&&&&Enumerate>` = note: required by `into_iter` error: aborting due to previous error diff --git a/src/test/ui/traits/check-trait-object-bounds-1.rs b/src/test/ui/traits/check-trait-object-bounds-1.rs index ad908a750b4..b1f124c7ea2 100644 --- a/src/test/ui/traits/check-trait-object-bounds-1.rs +++ b/src/test/ui/traits/check-trait-object-bounds-1.rs @@ -10,5 +10,5 @@ fn f() { fn main() { f::>(); - //~^ ERROR the trait bound `str: std::clone::Clone` is not satisfied + //~^ ERROR the trait bound `str: Clone` is not satisfied } diff --git a/src/test/ui/traits/check-trait-object-bounds-1.stderr b/src/test/ui/traits/check-trait-object-bounds-1.stderr index c53c91d42a7..170ed6eacfd 100644 --- a/src/test/ui/traits/check-trait-object-bounds-1.stderr +++ b/src/test/ui/traits/check-trait-object-bounds-1.stderr @@ -1,11 +1,11 @@ -error[E0277]: the trait bound `str: std::clone::Clone` is not satisfied +error[E0277]: the trait bound `str: Clone` is not satisfied --> $DIR/check-trait-object-bounds-1.rs:12:5 | LL | fn f() { | - required by this bound in `f` ... LL | f::>(); - | ^^^^^^^^^^^^^^^^^^^ the trait `std::clone::Clone` is not implemented for `str` + | ^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `str` error: aborting due to previous error diff --git a/src/test/ui/traits/check-trait-object-bounds-2.rs b/src/test/ui/traits/check-trait-object-bounds-2.rs index f825008c6a2..eb2fb6e841b 100644 --- a/src/test/ui/traits/check-trait-object-bounds-2.rs +++ b/src/test/ui/traits/check-trait-object-bounds-2.rs @@ -11,5 +11,5 @@ fn f X<'r> + ?Sized>() { fn main() { f:: X<'x, F = i32>>(); - //~^ expected a `std::ops::FnOnce<(&i32,)>` closure, found `i32` + //~^ expected a `FnOnce<(&i32,)>` closure, found `i32` } diff --git a/src/test/ui/traits/check-trait-object-bounds-2.stderr b/src/test/ui/traits/check-trait-object-bounds-2.stderr index 1241fc8cb51..04e2348634e 100644 --- a/src/test/ui/traits/check-trait-object-bounds-2.stderr +++ b/src/test/ui/traits/check-trait-object-bounds-2.stderr @@ -1,4 +1,4 @@ -error[E0277]: expected a `std::ops::FnOnce<(&i32,)>` closure, found `i32` +error[E0277]: expected a `FnOnce<(&i32,)>` closure, found `i32` --> $DIR/check-trait-object-bounds-2.rs:13:5 | LL | fn f X<'r> + ?Sized>() { @@ -7,7 +7,7 @@ LL | fn f X<'r> + ?Sized>() { LL | f:: X<'x, F = i32>>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected an `FnOnce<(&i32,)>` closure, found `i32` | - = help: the trait `for<'r> std::ops::FnOnce<(&'r i32,)>` is not implemented for `i32` + = help: the trait `for<'r> FnOnce<(&'r i32,)>` is not implemented for `i32` error: aborting due to previous error diff --git a/src/test/ui/traits/check-trait-object-bounds-4.rs b/src/test/ui/traits/check-trait-object-bounds-4.rs index 323508db2f2..e9ca1563f3b 100644 --- a/src/test/ui/traits/check-trait-object-bounds-4.rs +++ b/src/test/ui/traits/check-trait-object-bounds-4.rs @@ -13,5 +13,5 @@ fn f() { fn main() { f::>(); - //~^ ERROR the trait bound `str: std::clone::Clone` is not satisfied + //~^ ERROR the trait bound `str: Clone` is not satisfied } diff --git a/src/test/ui/traits/check-trait-object-bounds-4.stderr b/src/test/ui/traits/check-trait-object-bounds-4.stderr index 75d6862579d..fc9f31c5ebc 100644 --- a/src/test/ui/traits/check-trait-object-bounds-4.stderr +++ b/src/test/ui/traits/check-trait-object-bounds-4.stderr @@ -1,11 +1,11 @@ -error[E0277]: the trait bound `str: std::clone::Clone` is not satisfied +error[E0277]: the trait bound `str: Clone` is not satisfied --> $DIR/check-trait-object-bounds-4.rs:15:5 | LL | fn f() { | - required by this bound in `f` ... LL | f::>(); - | ^^^^^^^^^^^^^^^^^^^ the trait `std::clone::Clone` is not implemented for `str` + | ^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `str` error: aborting due to previous error diff --git a/src/test/ui/traits/cycle-cache-err-60010.stderr b/src/test/ui/traits/cycle-cache-err-60010.stderr index 738b052a11e..b2702d977f8 100644 --- a/src/test/ui/traits/cycle-cache-err-60010.stderr +++ b/src/test/ui/traits/cycle-cache-err-60010.stderr @@ -1,4 +1,4 @@ -error[E0275]: overflow evaluating the requirement `SalsaStorage: std::panic::RefUnwindSafe` +error[E0275]: overflow evaluating the requirement `SalsaStorage: RefUnwindSafe` --> $DIR/cycle-cache-err-60010.rs:69:5 | LL | fn parse(&self) { @@ -8,28 +8,12 @@ LL | SourceDatabase::parse(db); | ^^^^^^^^^^^^^^^^^^^^^ | = note: required because it appears within the type `*const SalsaStorage` - = note: required because it appears within the type `std::ptr::Unique` - = note: required because it appears within the type `std::boxed::Box` + = note: required because it appears within the type `Unique` + = note: required because it appears within the type `Box` = note: required because it appears within the type `Runtime` = note: required because it appears within the type `RootDatabase` = note: required because of the requirements on the impl of `SourceDatabase` for `RootDatabase` -error[E0275]: overflow evaluating the requirement `Runtime: RefUnwindSafe` - --> $DIR/cycle-cache-err-60010.rs:31:20 - | -LL | trait Database { - | -------- required by a bound in this -LL | type Storage; - | ------------- required by this bound in `Database` -... -LL | type Storage = SalsaStorage; - | ^^^^^^^^^^^^ - | - = 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 of the requirements on the impl of `Query` for `ParseQuery` - = note: required because it appears within the type `SalsaStorage` - -error: aborting due to 2 previous errors +error: aborting due to previous error For more information about this error, try `rustc --explain E0275`. diff --git a/src/test/ui/traits/traits-inductive-overflow-two-traits.stderr b/src/test/ui/traits/traits-inductive-overflow-two-traits.stderr index dbe0146cafa..996544ae516 100644 --- a/src/test/ui/traits/traits-inductive-overflow-two-traits.stderr +++ b/src/test/ui/traits/traits-inductive-overflow-two-traits.stderr @@ -9,8 +9,8 @@ LL | type X = Self; | help: consider further restricting this bound | -LL | impl Magic for T { - | ^^^^^^^^^^^^^^^^^^^ +LL | impl Magic for T { + | ^^^^^^ error[E0275]: overflow evaluating the requirement `*mut (): Magic` --> $DIR/traits-inductive-overflow-two-traits.rs:20:5 diff --git a/src/test/ui/try-block/try-block-bad-type.rs b/src/test/ui/try-block/try-block-bad-type.rs index c338294913f..496ba145810 100644 --- a/src/test/ui/try-block/try-block-bad-type.rs +++ b/src/test/ui/try-block/try-block-bad-type.rs @@ -14,7 +14,9 @@ pub fn main() { let res: Result = try { }; //~ ERROR type mismatch - let res: () = try { }; //~ the trait bound `(): Try` is not satisfied + let res: () = try { }; + //~^ ERROR the trait bound `(): Try` is not satisfied + //~| ERROR the trait bound `(): Try` is not satisfied let res: i32 = try { 5 }; //~ ERROR the trait bound `i32: Try` is not satisfied } diff --git a/src/test/ui/try-block/try-block-bad-type.stderr b/src/test/ui/try-block/try-block-bad-type.stderr index dfc1c342a50..cadf3a841c9 100644 --- a/src/test/ui/try-block/try-block-bad-type.stderr +++ b/src/test/ui/try-block/try-block-bad-type.stderr @@ -26,18 +26,24 @@ LL | let res: Result = try { }; | ^ expected `i32`, found `()` error[E0277]: the trait bound `(): Try` is not satisfied - --> $DIR/try-block-bad-type.rs:17:23 + --> $DIR/try-block-bad-type.rs:17:25 | LL | let res: () = try { }; - | ^^^ the trait `Try` is not implemented for `()` + | ^ the trait `Try` is not implemented for `()` | = note: required by `from_ok` +error[E0277]: the trait bound `(): Try` is not satisfied + --> $DIR/try-block-bad-type.rs:17:25 + | +LL | let res: () = try { }; + | ^ the trait `Try` is not implemented for `()` + error[E0277]: the trait bound `i32: Try` is not satisfied - --> $DIR/try-block-bad-type.rs:19:24 + --> $DIR/try-block-bad-type.rs:21:26 | LL | let res: i32 = try { 5 }; - | ^^^^^ the trait `Try` is not implemented for `i32` + | ^ the trait `Try` is not implemented for `i32` | = note: required by `from_ok` diff --git a/src/test/ui/try-block/try-block-in-while.stderr b/src/test/ui/try-block/try-block-in-while.stderr index bc0f5bb6505..75a4e8d065c 100644 --- a/src/test/ui/try-block/try-block-in-while.stderr +++ b/src/test/ui/try-block/try-block-in-while.stderr @@ -1,8 +1,8 @@ error[E0277]: the trait bound `bool: Try` is not satisfied - --> $DIR/try-block-in-while.rs:6:15 + --> $DIR/try-block-in-while.rs:6:17 | LL | while try { false } {} - | ^^^^^^^^^ the trait `Try` is not implemented for `bool` + | ^^^^^ the trait `Try` is not implemented for `bool` | = note: required by `from_ok` diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs index 5566f40f960..c0359159aeb 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs @@ -4,13 +4,13 @@ #![feature(type_alias_impl_trait)] type X = impl Clone; -//~^ ERROR the trait bound `T: std::clone::Clone` is not satisfied +//~^ ERROR the trait bound `T: Clone` is not satisfied fn f(t: T) -> X { t } -fn g(o : Option>) -> Option> { +fn g(o: Option>) -> Option> { o.clone() } diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr index e20130007ee..26a2f4135cb 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr @@ -1,13 +1,13 @@ -error[E0277]: the trait bound `T: std::clone::Clone` is not satisfied +error[E0277]: the trait bound `T: Clone` is not satisfied --> $DIR/bounds-are-checked-2.rs:6:13 | LL | type X = impl Clone; - | ^^^^^^^^^^ the trait `std::clone::Clone` is not implemented for `T` + | ^^^^^^^^^^ the trait `Clone` is not implemented for `T` | help: consider restricting type parameter `T` | -LL | type X = impl Clone; - | ^^^^^^^^^^^^^^^^^^^ +LL | type X = impl Clone; + | ^^^^^^^ error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr index 574be0eb0a2..d5fafe05887 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr @@ -12,8 +12,8 @@ error[E0308]: mismatched types LL | type X<'a> = impl Into<&'static str> + From<&'a str>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch | - = note: expected trait `std::convert::From<&'a str>` - found trait `std::convert::From<&'static str>` + = note: expected trait `From<&'a str>` + found trait `From<&'static str>` note: the lifetime `'a` as defined on the item at 6:8... --> $DIR/bounds-are-checked.rs:6:8 | diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs index ac877310414..dd2f202cf5d 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs @@ -6,12 +6,14 @@ fn main() {} // test that unused generic parameters are ok type Two = impl Debug; +//~^ ERROR `T` doesn't implement `Debug` +//~| ERROR `U` doesn't implement `Debug` fn two(t: T, u: U) -> Two { (t, u) } fn three(t: T, u: U) -> Two { -//~^ concrete type differs from previous + //~^ concrete type differs from previous (u, t) } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr index 1ddbc0c8d6a..b4aed4a6323 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr @@ -1,14 +1,39 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use5.rs:14:1 + --> $DIR/generic_duplicate_param_use5.rs:16:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, U)`, got `(U, T)` | note: previous use here - --> $DIR/generic_duplicate_param_use5.rs:10:1 + --> $DIR/generic_duplicate_param_use5.rs:12:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error +error[E0277]: `T` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use5.rs:8:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, U)` +help: consider restricting type parameter `T` + | +LL | type Two = impl Debug; + | ^^^^^^^ +error[E0277]: `U` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use5.rs:8:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `U` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, U)` +help: consider restricting type parameter `U` + | +LL | type Two = impl Debug; + | ^^^^^^^ + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs index 6cbb3069ecd..d54d3cd62e0 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs @@ -6,12 +6,13 @@ fn main() {} // test that unused generic parameters are ok type Two = impl Debug; +//~^ ERROR `T` doesn't implement `Debug` fn two(t: T, u: U) -> Two { (t, t) } fn three(t: T, u: U) -> Two { - //~^ concrete type differs from previous + //~^ ERROR concrete type differs from previous (u, t) } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr index ebd07b7c300..22e4d006674 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr @@ -1,14 +1,27 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use6.rs:14:1 + --> $DIR/generic_duplicate_param_use6.rs:15:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, T)`, got `(U, T)` | note: previous use here - --> $DIR/generic_duplicate_param_use6.rs:10:1 + --> $DIR/generic_duplicate_param_use6.rs:11:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error +error[E0277]: `T` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use6.rs:8:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, T)` +help: consider restricting type parameter `T` + | +LL | type Two = impl Debug; + | ^^^^^^^ +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs index 777ded52609..4a723b64cdc 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs @@ -5,12 +5,13 @@ use std::fmt::Debug; fn main() {} type Two = impl Debug; +//~^ ERROR `T` doesn't implement `Debug` fn two(t: T, _: U) -> Two { (t, 4u32) } fn three(_: T, u: U) -> Two { -//~^ concrete type differs from previous + //~^ concrete type differs from previous (u, 4u32) } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr index 4778ee5155c..82da704c9ee 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr @@ -1,14 +1,27 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use8.rs:13:1 + --> $DIR/generic_duplicate_param_use8.rs:14:1 | LL | fn three(_: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, u32)`, got `(U, u32)` | note: previous use here - --> $DIR/generic_duplicate_param_use8.rs:9:1 + --> $DIR/generic_duplicate_param_use8.rs:10:1 | LL | fn two(t: T, _: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error +error[E0277]: `T` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use8.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, u32)` +help: consider restricting type parameter `T` + | +LL | type Two = impl Debug; + | ^^^^^^^ +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs index 491e6647f45..74708193317 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs @@ -5,6 +5,9 @@ use std::fmt::Debug; fn main() {} type Two = impl Debug; +//~^ ERROR the trait bound `A: Foo` is not satisfied in `(A, B, ::Bar)` +//~| ERROR `A` doesn't implement `Debug` +//~| ERROR `B` doesn't implement `Debug` trait Foo { type Bar: Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr index 247b042f61e..63aa0f8a81c 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr @@ -1,14 +1,51 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use9.rs:18:1 + --> $DIR/generic_duplicate_param_use9.rs:21:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(A, B, ::Bar)`, got `(A, B, i32)` | note: previous use here - --> $DIR/generic_duplicate_param_use9.rs:14:1 + --> $DIR/generic_duplicate_param_use9.rs:17:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error +error[E0277]: the trait bound `A: Foo` is not satisfied in `(A, B, ::Bar)` + --> $DIR/generic_duplicate_param_use9.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ within `(A, B, ::Bar)`, the trait `Foo` is not implemented for `A` + | + = note: required because it appears within the type `(A, B, ::Bar)` +help: consider restricting type parameter `A` + | +LL | type Two = impl Debug; + | ^^^^^ +error[E0277]: `A` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use9.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `A` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(A, B, ::Bar)` +help: consider restricting type parameter `A` + | +LL | type Two = impl Debug; + | ^^^^^^^ + +error[E0277]: `B` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use9.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `B` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(A, B, ::Bar)` +help: consider restricting type parameter `B` + | +LL | type Two = impl Debug; + | ^^^^^^^ + +error: aborting due to 4 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs index c0f939a5048..f6d49096036 100644 --- a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs @@ -8,7 +8,8 @@ fn main() { type WrongGeneric = impl 'static; //~^ ERROR the parameter type `T` may not live long enough -//~^^ ERROR: at least one trait must be specified +//~| ERROR the parameter type `T` may not live long enough +//~| ERROR: at least one trait must be specified fn wrong_generic(t: T) -> WrongGeneric { t diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr index 18d8daa05e6..4924c447d7e 100644 --- a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr @@ -27,7 +27,16 @@ LL | type WrongGeneric = impl 'static; LL | fn wrong_generic(t: T) -> WrongGeneric { | - help: consider adding an explicit lifetime bound...: `T: 'static` -error: aborting due to 3 previous errors +error[E0310]: the parameter type `T` may not live long enough + --> $DIR/generic_type_does_not_live_long_enough.rs:9:24 + | +LL | type WrongGeneric = impl 'static; + | ^^^^^^^^^^^^ + | + = help: consider adding an explicit lifetime bound `T: 'static`... + = note: ...so that the type `T` will meet its required lifetime bounds + +error: aborting due to 4 previous errors Some errors have detailed explanations: E0308, E0310. For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs index 782eb0fb3df..3372b81404e 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs @@ -16,6 +16,10 @@ struct X; impl Foo for X { type Bar = impl Baz; //~^ ERROR mismatched types + //~| ERROR mismatched types + //~| ERROR mismatched types + //~| ERROR mismatched types + //~| ERROR mismatched types fn bar(&self) -> Self::Bar { |x| x diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr index a8706aa9a24..5e2a8db0286 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr @@ -7,6 +7,42 @@ LL | type Bar = impl Baz; = note: expected type `FnOnce<(&X,)>` found type `FnOnce<(&X,)>` -error: aborting due to previous error +error[E0308]: mismatched types + --> $DIR/issue-57611-trait-alias.rs:17:16 + | +LL | type Bar = impl Baz; + | ^^^^^^^^^^^^^^^^^^^^ one type is more general than the other + | + = note: expected type `for<'r> Fn<(&'r X,)>` + found type `Fn<(&' X,)>` + +error[E0308]: mismatched types + --> $DIR/issue-57611-trait-alias.rs:17:16 + | +LL | type Bar = impl Baz; + | ^^^^^^^^^^^^^^^^^^^^ one type is more general than the other + | + = note: expected type `FnOnce<(&X,)>` + found type `FnOnce<(&' X,)>` + +error[E0308]: mismatched types + --> $DIR/issue-57611-trait-alias.rs:17:16 + | +LL | type Bar = impl Baz; + | ^^^^^^^^^^^^^^^^^^^^ one type is more general than the other + | + = note: expected type `for<'r> Fn<(&'r X,)>` + found type `Fn<(&' X,)>` + +error[E0308]: mismatched types + --> $DIR/issue-57611-trait-alias.rs:17:16 + | +LL | type Bar = impl Baz; + | ^^^^^^^^^^^^^^^^^^^^ one type is more general than the other + | + = note: expected type `FnOnce<(&X,)>` + found type `FnOnce<(&' X,)>` + +error: aborting due to 5 previous errors For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr b/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr index 9e710c15fdb..a2bf9630445 100644 --- a/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr +++ b/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr @@ -5,6 +5,7 @@ LL | >::add(1, 2); | ^^^^^^^^^^^^^^^^^^^^^^ no implementation for `i32 + u32` | = help: the trait `Add` is not implemented for `i32` + = note: required by `add` error[E0308]: mismatched types --> $DIR/ufcs-qpath-self-mismatch.rs:6:28