mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-04 02:54:00 +00:00
Rollup merge of #98497 - compiler-errors:span-inference-note, r=lcnr
Improve some inference diagnostics - Properly point out point location where "type must be known at this point", or else omit the note if it's not associated with a useful span. - Fix up some type ambiguity diagnostics, errors shouldn't say "cannot infer type for reference `&'a ()`" when the given type has no inference variables.
This commit is contained in:
commit
b0935b1ddf
@ -313,11 +313,12 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
|||||||
pub fn emit_inference_failure_err(
|
pub fn emit_inference_failure_err(
|
||||||
&self,
|
&self,
|
||||||
body_id: Option<hir::BodyId>,
|
body_id: Option<hir::BodyId>,
|
||||||
span: Span,
|
failure_span: Span,
|
||||||
arg: GenericArg<'tcx>,
|
arg: GenericArg<'tcx>,
|
||||||
// FIXME(#94483): Either use this or remove it.
|
// FIXME(#94483): Either use this or remove it.
|
||||||
_impl_candidates: Vec<ty::TraitRef<'tcx>>,
|
_impl_candidates: Vec<ty::TraitRef<'tcx>>,
|
||||||
error_code: TypeAnnotationNeeded,
|
error_code: TypeAnnotationNeeded,
|
||||||
|
should_label_span: bool,
|
||||||
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let arg = self.resolve_vars_if_possible(arg);
|
let arg = self.resolve_vars_if_possible(arg);
|
||||||
let arg_data = self.extract_inference_diagnostics_data(arg, None);
|
let arg_data = self.extract_inference_diagnostics_data(arg, None);
|
||||||
@ -326,7 +327,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
|||||||
// If we don't have any typeck results we're outside
|
// If we don't have any typeck results we're outside
|
||||||
// of a body, so we won't be able to get better info
|
// of a body, so we won't be able to get better info
|
||||||
// here.
|
// here.
|
||||||
return self.bad_inference_failure_err(span, arg_data, error_code);
|
return self.bad_inference_failure_err(failure_span, arg_data, error_code);
|
||||||
};
|
};
|
||||||
let typeck_results = typeck_results.borrow();
|
let typeck_results = typeck_results.borrow();
|
||||||
let typeck_results = &typeck_results;
|
let typeck_results = &typeck_results;
|
||||||
@ -338,7 +339,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(InferSource { span, kind }) = local_visitor.infer_source else {
|
let Some(InferSource { span, kind }) = local_visitor.infer_source else {
|
||||||
return self.bad_inference_failure_err(span, arg_data, error_code)
|
return self.bad_inference_failure_err(failure_span, arg_data, error_code)
|
||||||
};
|
};
|
||||||
|
|
||||||
let error_code = error_code.into();
|
let error_code = error_code.into();
|
||||||
@ -347,6 +348,11 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
|||||||
&format!("type annotations needed{}", kind.ty_msg(self)),
|
&format!("type annotations needed{}", kind.ty_msg(self)),
|
||||||
error_code,
|
error_code,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if should_label_span && !failure_span.overlaps(span) {
|
||||||
|
err.span_label(failure_span, "type must be known at this point");
|
||||||
|
}
|
||||||
|
|
||||||
match kind {
|
match kind {
|
||||||
InferSourceKind::LetBinding { insert_span, pattern_name, ty } => {
|
InferSourceKind::LetBinding { insert_span, pattern_name, ty } => {
|
||||||
let suggestion_msg = if let Some(name) = pattern_name {
|
let suggestion_msg = if let Some(name) = pattern_name {
|
||||||
|
@ -914,9 +914,17 @@ impl<'tcx> Term<'tcx> {
|
|||||||
pub fn ty(&self) -> Option<Ty<'tcx>> {
|
pub fn ty(&self) -> Option<Ty<'tcx>> {
|
||||||
if let Term::Ty(ty) = self { Some(*ty) } else { None }
|
if let Term::Ty(ty) = self { Some(*ty) } else { None }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ct(&self) -> Option<Const<'tcx>> {
|
pub fn ct(&self) -> Option<Const<'tcx>> {
|
||||||
if let Term::Const(c) = self { Some(*c) } else { None }
|
if let Term::Const(c) = self { Some(*c) } else { None }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn into_arg(self) -> GenericArg<'tcx> {
|
||||||
|
match self {
|
||||||
|
Term::Ty(ty) => ty.into(),
|
||||||
|
Term::Const(c) => c.into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This kind of predicate has no *direct* correspondent in the
|
/// This kind of predicate has no *direct* correspondent in the
|
||||||
|
@ -1958,26 +1958,6 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||||||
if predicate.references_error() {
|
if predicate.references_error() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Typically, this ambiguity should only happen if
|
|
||||||
// there are unresolved type inference variables
|
|
||||||
// (otherwise it would suggest a coherence
|
|
||||||
// failure). But given #21974 that is not necessarily
|
|
||||||
// the case -- we can have multiple where clauses that
|
|
||||||
// are only distinguished by a region, which results
|
|
||||||
// in an ambiguity even when all types are fully
|
|
||||||
// known, since we don't dispatch based on region
|
|
||||||
// relationships.
|
|
||||||
|
|
||||||
// Pick the first substitution that still contains inference variables as the one
|
|
||||||
// we're going to emit an error for. If there are none (see above), fall back to
|
|
||||||
// the substitution for `Self`.
|
|
||||||
let subst = {
|
|
||||||
let substs = data.trait_ref.substs;
|
|
||||||
substs
|
|
||||||
.iter()
|
|
||||||
.find(|s| s.has_infer_types_or_consts())
|
|
||||||
.unwrap_or_else(|| substs[0])
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is kind of a hack: it frequently happens that some earlier
|
// This is kind of a hack: it frequently happens that some earlier
|
||||||
// error prevents types from being fully inferred, and then we get
|
// error prevents types from being fully inferred, and then we get
|
||||||
@ -1999,27 +1979,54 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||||||
self.emit_inference_failure_err(
|
self.emit_inference_failure_err(
|
||||||
body_id,
|
body_id,
|
||||||
span,
|
span,
|
||||||
subst,
|
trait_ref.self_ty().skip_binder().into(),
|
||||||
vec![],
|
vec![],
|
||||||
ErrorCode::E0282,
|
ErrorCode::E0282,
|
||||||
|
false,
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let impl_candidates = self
|
// Typically, this ambiguity should only happen if
|
||||||
.find_similar_impl_candidates(trait_ref)
|
// there are unresolved type inference variables
|
||||||
.into_iter()
|
// (otherwise it would suggest a coherence
|
||||||
.map(|candidate| candidate.trait_ref)
|
// failure). But given #21974 that is not necessarily
|
||||||
.collect();
|
// the case -- we can have multiple where clauses that
|
||||||
let mut err = self.emit_inference_failure_err(
|
// are only distinguished by a region, which results
|
||||||
body_id,
|
// in an ambiguity even when all types are fully
|
||||||
span,
|
// known, since we don't dispatch based on region
|
||||||
subst,
|
// relationships.
|
||||||
impl_candidates,
|
|
||||||
ErrorCode::E0283,
|
// Pick the first substitution that still contains inference variables as the one
|
||||||
);
|
// we're going to emit an error for. If there are none (see above), fall back to
|
||||||
|
// a more general error.
|
||||||
|
let subst = data.trait_ref.substs.iter().find(|s| s.has_infer_types_or_consts());
|
||||||
|
|
||||||
|
let mut err = if let Some(subst) = subst {
|
||||||
|
let impl_candidates = self
|
||||||
|
.find_similar_impl_candidates(trait_ref)
|
||||||
|
.into_iter()
|
||||||
|
.map(|candidate| candidate.trait_ref)
|
||||||
|
.collect();
|
||||||
|
self.emit_inference_failure_err(
|
||||||
|
body_id,
|
||||||
|
span,
|
||||||
|
subst,
|
||||||
|
impl_candidates,
|
||||||
|
ErrorCode::E0283,
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
struct_span_err!(
|
||||||
|
self.tcx.sess,
|
||||||
|
span,
|
||||||
|
E0283,
|
||||||
|
"type annotations needed: cannot satisfy `{}`",
|
||||||
|
predicate,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
let obligation = Obligation::new(
|
let obligation = Obligation::new(
|
||||||
obligation.cause.clone(),
|
obligation.cause.clone(),
|
||||||
@ -2110,7 +2117,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.emit_inference_failure_err(body_id, span, arg, vec![], ErrorCode::E0282)
|
self.emit_inference_failure_err(body_id, span, arg, vec![], ErrorCode::E0282, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
ty::PredicateKind::Subtype(data) => {
|
ty::PredicateKind::Subtype(data) => {
|
||||||
@ -2124,26 +2131,38 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||||||
let SubtypePredicate { a_is_expected: _, a, b } = data;
|
let SubtypePredicate { a_is_expected: _, a, b } = data;
|
||||||
// both must be type variables, or the other would've been instantiated
|
// both must be type variables, or the other would've been instantiated
|
||||||
assert!(a.is_ty_var() && b.is_ty_var());
|
assert!(a.is_ty_var() && b.is_ty_var());
|
||||||
self.emit_inference_failure_err(body_id, span, a.into(), vec![], ErrorCode::E0282)
|
self.emit_inference_failure_err(
|
||||||
|
body_id,
|
||||||
|
span,
|
||||||
|
a.into(),
|
||||||
|
vec![],
|
||||||
|
ErrorCode::E0282,
|
||||||
|
true,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
ty::PredicateKind::Projection(data) => {
|
ty::PredicateKind::Projection(data) => {
|
||||||
let self_ty = data.projection_ty.self_ty();
|
|
||||||
let term = data.term;
|
|
||||||
if predicate.references_error() || self.is_tainted_by_errors() {
|
if predicate.references_error() || self.is_tainted_by_errors() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if self_ty.needs_infer() && term.needs_infer() {
|
let subst = data
|
||||||
// We do this for the `foo.collect()?` case to produce a suggestion.
|
.projection_ty
|
||||||
|
.substs
|
||||||
|
.iter()
|
||||||
|
.chain(Some(data.term.into_arg()))
|
||||||
|
.find(|g| g.has_infer_types_or_consts());
|
||||||
|
if let Some(subst) = subst {
|
||||||
let mut err = self.emit_inference_failure_err(
|
let mut err = self.emit_inference_failure_err(
|
||||||
body_id,
|
body_id,
|
||||||
span,
|
span,
|
||||||
self_ty.into(),
|
subst,
|
||||||
vec![],
|
vec![],
|
||||||
ErrorCode::E0284,
|
ErrorCode::E0284,
|
||||||
|
true,
|
||||||
);
|
);
|
||||||
err.note(&format!("cannot satisfy `{}`", predicate));
|
err.note(&format!("cannot satisfy `{}`", predicate));
|
||||||
err
|
err
|
||||||
} else {
|
} else {
|
||||||
|
// If we can't find a substitution, just print a generic error
|
||||||
let mut err = struct_span_err!(
|
let mut err = struct_span_err!(
|
||||||
self.tcx.sess,
|
self.tcx.sess,
|
||||||
span,
|
span,
|
||||||
|
@ -1538,9 +1538,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
ty
|
ty
|
||||||
} else {
|
} else {
|
||||||
if !self.is_tainted_by_errors() {
|
if !self.is_tainted_by_errors() {
|
||||||
self.emit_inference_failure_err((**self).body_id, sp, ty.into(), vec![], E0282)
|
self.emit_inference_failure_err(
|
||||||
.note("type must be known at this point")
|
(**self).body_id,
|
||||||
.emit();
|
sp,
|
||||||
|
ty.into(),
|
||||||
|
vec![],
|
||||||
|
E0282,
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
.emit();
|
||||||
}
|
}
|
||||||
let err = self.tcx.ty_error();
|
let err = self.tcx.ty_error();
|
||||||
self.demand_suptype(sp, err, ty);
|
self.demand_suptype(sp, err, ty);
|
||||||
|
@ -694,6 +694,7 @@ impl<'cx, 'tcx> Resolver<'cx, 'tcx> {
|
|||||||
t.into(),
|
t.into(),
|
||||||
vec![],
|
vec![],
|
||||||
E0282,
|
E0282,
|
||||||
|
false,
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
@ -708,6 +709,7 @@ impl<'cx, 'tcx> Resolver<'cx, 'tcx> {
|
|||||||
c.into(),
|
c.into(),
|
||||||
vec![],
|
vec![],
|
||||||
E0282,
|
E0282,
|
||||||
|
false,
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ error[E0282]: type annotations needed
|
|||||||
LL | let [_, _] = a.into();
|
LL | let [_, _] = a.into();
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this pattern a type
|
help: consider giving this pattern a type
|
||||||
|
|
|
|
||||||
LL | let [_, _]: _ = a.into();
|
LL | let [_, _]: _ = a.into();
|
||||||
|
@ -27,8 +27,6 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | [] => {}
|
LL | [] => {}
|
||||||
| ^^ cannot infer type
|
| ^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let b = (a + 1) as usize;
|
LL | let b = (a + 1) as usize;
|
||||||
| ^^^^^^^ cannot infer type
|
| ^^^^^^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `u32: C`
|
||||||
--> $DIR/coherence-overlap-trait-alias.rs:15:6
|
--> $DIR/coherence-overlap-trait-alias.rs:15:6
|
||||||
|
|
|
|
||||||
LL | impl C for u32 {}
|
LL | impl C for u32 {}
|
||||||
| ^ cannot infer type for type `u32`
|
| ^
|
||||||
|
|
|
|
||||||
note: multiple `impl`s satisfying `u32: C` found
|
note: multiple `impl`s satisfying `u32: C` found
|
||||||
--> $DIR/coherence-overlap-trait-alias.rs:14:1
|
--> $DIR/coherence-overlap-trait-alias.rs:14:1
|
||||||
|
@ -2,7 +2,7 @@ error[E0283]: type annotations needed for `Mask<_, LANES>`
|
|||||||
--> $DIR/issue-91614.rs:6:9
|
--> $DIR/issue-91614.rs:6:9
|
||||||
|
|
|
|
||||||
LL | let y = Mask::<_, _>::splat(false);
|
LL | let y = Mask::<_, _>::splat(false);
|
||||||
| ^
|
| ^ ------------------- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `_: MaskElement`
|
= note: cannot satisfy `_: MaskElement`
|
||||||
note: required by a bound in `Mask::<T, LANES>::splat`
|
note: required by a bound in `Mask::<T, LANES>::splat`
|
||||||
|
@ -34,19 +34,19 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True,
|
|||||||
= help: const parameters may only be used as standalone arguments, i.e. `J`
|
= help: const parameters may only be used as standalone arguments, i.e. `J`
|
||||||
= help: use `#![feature(generic_const_exprs)]` to allow generic const expressions
|
= help: use `#![feature(generic_const_exprs)]` to allow generic const expressions
|
||||||
|
|
||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `IsLessOrEqual<I, 8_u32>: True`
|
||||||
--> $DIR/issue-72787.rs:21:26
|
--> $DIR/issue-72787.rs:21:26
|
||||||
|
|
|
|
||||||
LL | IsLessOrEqual<I, 8>: True,
|
LL | IsLessOrEqual<I, 8>: True,
|
||||||
| ^^^^ cannot infer type for struct `IsLessOrEqual<I, 8_u32>`
|
| ^^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `IsLessOrEqual<I, 8_u32>: True`
|
= note: cannot satisfy `IsLessOrEqual<I, 8_u32>: True`
|
||||||
|
|
||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `IsLessOrEqual<I, 8_u32>: True`
|
||||||
--> $DIR/issue-72787.rs:21:26
|
--> $DIR/issue-72787.rs:21:26
|
||||||
|
|
|
|
||||||
LL | IsLessOrEqual<I, 8>: True,
|
LL | IsLessOrEqual<I, 8>: True,
|
||||||
| ^^^^ cannot infer type for struct `IsLessOrEqual<I, 8_u32>`
|
| ^^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `IsLessOrEqual<I, 8_u32>: True`
|
= note: cannot satisfy `IsLessOrEqual<I, 8_u32>: True`
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ struct S<const I: u32, const J: u32>;
|
|||||||
impl<const I: u32, const J: u32> S<I, J>
|
impl<const I: u32, const J: u32> S<I, J>
|
||||||
where
|
where
|
||||||
IsLessOrEqual<I, 8>: True,
|
IsLessOrEqual<I, 8>: True,
|
||||||
//[min]~^ Error type annotations needed [E0283]
|
//[min]~^ Error type annotations needed
|
||||||
//[min]~| Error type annotations needed [E0283]
|
//[min]~| Error type annotations needed
|
||||||
IsLessOrEqual<J, 8>: True,
|
IsLessOrEqual<J, 8>: True,
|
||||||
IsLessOrEqual<{ 8 - I }, { 8 - J }>: True,
|
IsLessOrEqual<{ 8 - I }, { 8 - J }>: True,
|
||||||
//[min]~^ Error generic parameters may not be used in const operations
|
//[min]~^ Error generic parameters may not be used in const operations
|
||||||
|
@ -3,16 +3,12 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | cont.reify_as();
|
LL | cont.reify_as();
|
||||||
| ^^^^ cannot infer type
|
| ^^^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error[E0282]: type annotations needed
|
error[E0282]: type annotations needed
|
||||||
--> $DIR/hidden-type-is-opaque-2.rs:18:9
|
--> $DIR/hidden-type-is-opaque-2.rs:18:9
|
||||||
|
|
|
|
||||||
LL | cont.reify_as();
|
LL | cont.reify_as();
|
||||||
| ^^^^ cannot infer type
|
| ^^^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -3,6 +3,9 @@ error[E0282]: type annotations needed for `Result<(), QualifiedError<_>>`
|
|||||||
|
|
|
|
||||||
LL | let x = || -> Result<_, QualifiedError<_>> {
|
LL | let x = || -> Result<_, QualifiedError<_>> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
LL |
|
||||||
|
LL | infallible()?;
|
||||||
|
| ------------- type must be known at this point
|
||||||
|
|
|
|
||||||
help: try giving this closure an explicit return type
|
help: try giving this closure an explicit return type
|
||||||
|
|
|
|
||||||
|
@ -2,7 +2,7 @@ error[E0283]: type annotations needed for `Foo<i32, &str, W, Z>`
|
|||||||
--> $DIR/erase-type-params-in-label.rs:2:9
|
--> $DIR/erase-type-params-in-label.rs:2:9
|
||||||
|
|
|
|
||||||
LL | let foo = foo(1, "");
|
LL | let foo = foo(1, "");
|
||||||
| ^^^
|
| ^^^ --- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `_: Default`
|
= note: cannot satisfy `_: Default`
|
||||||
note: required by a bound in `foo`
|
note: required by a bound in `foo`
|
||||||
@ -23,7 +23,7 @@ error[E0283]: type annotations needed for `Bar<i32, &str, Z>`
|
|||||||
--> $DIR/erase-type-params-in-label.rs:5:9
|
--> $DIR/erase-type-params-in-label.rs:5:9
|
||||||
|
|
|
|
||||||
LL | let bar = bar(1, "");
|
LL | let bar = bar(1, "");
|
||||||
| ^^^
|
| ^^^ --- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `_: Default`
|
= note: cannot satisfy `_: Default`
|
||||||
note: required by a bound in `bar`
|
note: required by a bound in `bar`
|
||||||
|
@ -2,7 +2,9 @@ error[E0283]: type annotations needed
|
|||||||
--> $DIR/issue-72616.rs:20:37
|
--> $DIR/issue-72616.rs:20:37
|
||||||
|
|
|
|
||||||
LL | if String::from("a") == "a".try_into().unwrap() {}
|
LL | if String::from("a") == "a".try_into().unwrap() {}
|
||||||
| ^^^^^^^^
|
| -- ^^^^^^^^
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
|
||||||
= note: multiple `impl`s satisfying `String: PartialEq<_>` found in the `alloc` crate:
|
= note: multiple `impl`s satisfying `String: PartialEq<_>` found in the `alloc` crate:
|
||||||
- impl PartialEq for String;
|
- impl PartialEq for String;
|
||||||
|
@ -55,7 +55,7 @@ error[E0283]: type annotations needed for `&T`
|
|||||||
--> $DIR/issue-72690.rs:17:9
|
--> $DIR/issue-72690.rs:17:9
|
||||||
|
|
|
|
||||||
LL | let _ = "x".as_ref();
|
LL | let _ = "x".as_ref();
|
||||||
| ^
|
| ^ ------ type must be known at this point
|
||||||
|
|
|
|
||||||
= note: multiple `impl`s satisfying `str: AsRef<_>` found in the following crates: `core`, `std`:
|
= note: multiple `impl`s satisfying `str: AsRef<_>` found in the following crates: `core`, `std`:
|
||||||
- impl AsRef<OsStr> for str;
|
- impl AsRef<OsStr> for str;
|
||||||
|
@ -2,7 +2,9 @@ error[E0283]: type annotations needed
|
|||||||
--> $DIR/issue-86162-1.rs:7:9
|
--> $DIR/issue-86162-1.rs:7:9
|
||||||
|
|
|
|
||||||
LL | foo(gen()); //<- Do not suggest `foo::<impl Clone>()`!
|
LL | foo(gen()); //<- Do not suggest `foo::<impl Clone>()`!
|
||||||
| ^^^ cannot infer type of the type parameter `T` declared on the function `gen`
|
| --- ^^^ cannot infer type of the type parameter `T` declared on the function `gen`
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `_: Clone`
|
= note: cannot satisfy `_: Clone`
|
||||||
note: required by a bound in `foo`
|
note: required by a bound in `foo`
|
||||||
|
@ -2,7 +2,9 @@ error[E0283]: type annotations needed
|
|||||||
--> $DIR/issue-86162-2.rs:12:14
|
--> $DIR/issue-86162-2.rs:12:14
|
||||||
|
|
|
|
||||||
LL | Foo::bar(gen()); //<- Do not suggest `Foo::bar::<impl Clone>()`!
|
LL | Foo::bar(gen()); //<- Do not suggest `Foo::bar::<impl Clone>()`!
|
||||||
| ^^^ cannot infer type of the type parameter `T` declared on the function `gen`
|
| -------- ^^^ cannot infer type of the type parameter `T` declared on the function `gen`
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `_: Clone`
|
= note: cannot satisfy `_: Clone`
|
||||||
note: required by a bound in `Foo::bar`
|
note: required by a bound in `Foo::bar`
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
error[E0284]: type annotations needed: cannot satisfy `<_ as StreamHasher>::S == <H as StreamHasher>::S`
|
error[E0284]: type annotations needed
|
||||||
--> $DIR/issue-12028.rs:27:14
|
--> $DIR/issue-12028.rs:27:14
|
||||||
|
|
|
|
||||||
LL | self.input_stream(&mut stream);
|
LL | self.input_stream(&mut stream);
|
||||||
| ^^^^^^^^^^^^ cannot satisfy `<_ as StreamHasher>::S == <H as StreamHasher>::S`
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: cannot satisfy `<_ as StreamHasher>::S == <H as StreamHasher>::S`
|
||||||
|
help: try using a fully qualified path to specify the expected types
|
||||||
|
|
|
||||||
|
LL | <u8 as StreamHash<H>>::input_stream(self, &mut stream);
|
||||||
|
| ++++++++++++++++++++++++++++++++++++ ~
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -5,8 +5,6 @@ LL | / { return () }
|
|||||||
LL | |
|
LL | |
|
||||||
LL | | ()
|
LL | | ()
|
||||||
| |______^ cannot infer type
|
| |______^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | i.clone();
|
LL | i.clone();
|
||||||
| ^^^^^ cannot infer type
|
| ^^^^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -3,8 +3,9 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let x = panic!();
|
LL | let x = panic!();
|
||||||
| ^
|
| ^
|
||||||
|
LL | x.clone();
|
||||||
|
| - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving `x` an explicit type
|
help: consider giving `x` an explicit type
|
||||||
|
|
|
|
||||||
LL | let x: _ = panic!();
|
LL | let x: _ = panic!();
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `&'a T: Foo`
|
||||||
--> $DIR/issue-21974.rs:11:19
|
--> $DIR/issue-21974.rs:11:19
|
||||||
|
|
|
|
||||||
LL | where &'a T : Foo,
|
LL | where &'a T : Foo,
|
||||||
| ^^^ cannot infer type for reference `&'a T`
|
| ^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `&'a T: Foo`
|
= note: cannot satisfy `&'a T: Foo`
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `T0: Trait0<'l0>`
|
||||||
--> $DIR/issue-24424.rs:4:57
|
--> $DIR/issue-24424.rs:4:57
|
||||||
|
|
|
|
||||||
LL | impl <'l0, 'l1, T0> Trait1<'l0, T0> for bool where T0 : Trait0<'l0>, T0 : Trait0<'l1> {}
|
LL | impl <'l0, 'l1, T0> Trait1<'l0, T0> for bool where T0 : Trait0<'l0>, T0 : Trait0<'l1> {}
|
||||||
| ^^^^^^^^^^^ cannot infer type for type parameter `T0`
|
| ^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `T0: Trait0<'l0>`
|
= note: cannot satisfy `T0: Trait0<'l0>`
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ fn main() {
|
|||||||
*tile = 0;
|
*tile = 0;
|
||||||
//~^ ERROR type annotations needed
|
//~^ ERROR type annotations needed
|
||||||
//~| NOTE cannot infer type
|
//~| NOTE cannot infer type
|
||||||
//~| NOTE type must be known at this point
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | *tile = 0;
|
LL | *tile = 0;
|
||||||
| ^^^^^ cannot infer type
|
| ^^^^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -14,7 +14,9 @@ error[E0283]: type annotations needed
|
|||||||
--> $DIR/issue-69455.rs:29:41
|
--> $DIR/issue-69455.rs:29:41
|
||||||
|
|
|
|
||||||
LL | println!("{}", 23u64.test(xs.iter().sum()));
|
LL | println!("{}", 23u64.test(xs.iter().sum()));
|
||||||
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
| ---- ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
|
||||||
note: multiple `impl`s satisfying `u64: Test<_>` found
|
note: multiple `impl`s satisfying `u64: Test<_>` found
|
||||||
--> $DIR/issue-69455.rs:11:1
|
--> $DIR/issue-69455.rs:11:1
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
error[E0284]: type annotations needed: cannot satisfy `<u8 as Element<_>>::Array == [u8; 3]`
|
error[E0284]: type annotations needed
|
||||||
--> $DIR/issue-69683.rs:30:10
|
--> $DIR/issue-69683.rs:30:10
|
||||||
|
|
|
|
||||||
LL | 0u16.foo(b);
|
LL | 0u16.foo(b);
|
||||||
| ^^^ cannot satisfy `<u8 as Element<_>>::Array == [u8; 3]`
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: cannot satisfy `<u8 as Element<_>>::Array == [u8; 3]`
|
||||||
|
help: try using a fully qualified path to specify the expected types
|
||||||
|
|
|
||||||
|
LL | <u16 as Foo<I>>::foo(0u16, b);
|
||||||
|
| +++++++++++++++++++++ ~
|
||||||
|
|
||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed
|
||||||
--> $DIR/issue-69683.rs:30:10
|
--> $DIR/issue-69683.rs:30:10
|
||||||
|
@ -1,8 +1,16 @@
|
|||||||
error[E0284]: type annotations needed: cannot satisfy `<u64 as Rem<_>>::Output == u64`
|
error[E0284]: type annotations needed
|
||||||
--> $DIR/issue-71584.rs:4:11
|
--> $DIR/issue-71584.rs:4:15
|
||||||
|
|
|
|
||||||
LL | d = d % n.into();
|
LL | d = d % n.into();
|
||||||
| ^ cannot satisfy `<u64 as Rem<_>>::Output == u64`
|
| - ^^^^
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
||||||
|
= note: cannot satisfy `<u64 as Rem<_>>::Output == u64`
|
||||||
|
help: try using a fully qualified path to specify the expected types
|
||||||
|
|
|
||||||
|
LL | d = d % <u32 as Into<T>>::into(n);
|
||||||
|
| +++++++++++++++++++++++ ~
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `&[_; 0]`
|
|||||||
--> $DIR/issue-7813.rs:2:9
|
--> $DIR/issue-7813.rs:2:9
|
||||||
|
|
|
|
||||||
LL | let v = &[];
|
LL | let v = &[];
|
||||||
| ^
|
| ^ --- type must be known at this point
|
||||||
|
|
|
|
||||||
help: consider giving `v` an explicit type, where the placeholders `_` are specified
|
help: consider giving `v` an explicit type, where the placeholders `_` are specified
|
||||||
|
|
|
|
||||||
|
@ -2,9 +2,8 @@ error[E0282]: type annotations needed
|
|||||||
--> $DIR/branches3.rs:8:10
|
--> $DIR/branches3.rs:8:10
|
||||||
|
|
|
|
||||||
LL | |s| s.len()
|
LL | |s| s.len()
|
||||||
| ^
|
| ^ - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this closure parameter an explicit type
|
help: consider giving this closure parameter an explicit type
|
||||||
|
|
|
|
||||||
LL | |s: _| s.len()
|
LL | |s: _| s.len()
|
||||||
@ -14,9 +13,8 @@ error[E0282]: type annotations needed
|
|||||||
--> $DIR/branches3.rs:15:10
|
--> $DIR/branches3.rs:15:10
|
||||||
|
|
|
|
||||||
LL | |s| s.len()
|
LL | |s| s.len()
|
||||||
| ^
|
| ^ - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this closure parameter an explicit type
|
help: consider giving this closure parameter an explicit type
|
||||||
|
|
|
|
||||||
LL | |s: _| s.len()
|
LL | |s: _| s.len()
|
||||||
@ -26,9 +24,8 @@ error[E0282]: type annotations needed
|
|||||||
--> $DIR/branches3.rs:23:10
|
--> $DIR/branches3.rs:23:10
|
||||||
|
|
|
|
||||||
LL | |s| s.len()
|
LL | |s| s.len()
|
||||||
| ^
|
| ^ - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this closure parameter an explicit type
|
help: consider giving this closure parameter an explicit type
|
||||||
|
|
|
|
||||||
LL | |s: _| s.len()
|
LL | |s: _| s.len()
|
||||||
@ -38,9 +35,8 @@ error[E0282]: type annotations needed
|
|||||||
--> $DIR/branches3.rs:30:10
|
--> $DIR/branches3.rs:30:10
|
||||||
|
|
|
|
||||||
LL | |s| s.len()
|
LL | |s| s.len()
|
||||||
| ^
|
| ^ - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this closure parameter an explicit type
|
help: consider giving this closure parameter an explicit type
|
||||||
|
|
|
|
||||||
LL | |s: _| s.len()
|
LL | |s: _| s.len()
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `&'a (): Foo`
|
||||||
--> $DIR/issue-34979.rs:6:13
|
--> $DIR/issue-34979.rs:6:13
|
||||||
|
|
|
|
||||||
LL | &'a (): Foo,
|
LL | &'a (): Foo,
|
||||||
| ^^^ cannot infer type for reference `&'a ()`
|
| ^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `&'a (): Foo`
|
= note: cannot satisfy `&'a (): Foo`
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `(&'static (), &'a ()): A`
|
||||||
--> $DIR/region-overlap.rs:5:10
|
--> $DIR/region-overlap.rs:5:10
|
||||||
|
|
|
|
||||||
LL | impl<'a> A for (&'static (), &'a ()) {}
|
LL | impl<'a> A for (&'static (), &'a ()) {}
|
||||||
| ^ cannot infer type for tuple `(&'static (), &'a ())`
|
| ^
|
||||||
|
|
|
|
||||||
note: multiple `impl`s satisfying `(&'static (), &'a ()): A` found
|
note: multiple `impl`s satisfying `(&'static (), &'a ()): A` found
|
||||||
--> $DIR/region-overlap.rs:5:1
|
--> $DIR/region-overlap.rs:5:1
|
||||||
@ -12,11 +12,11 @@ LL | impl<'a> A for (&'static (), &'a ()) {}
|
|||||||
LL | impl<'a> A for (&'a (), &'static ()) {}
|
LL | impl<'a> A for (&'a (), &'static ()) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `(&'a (), &'static ()): A`
|
||||||
--> $DIR/region-overlap.rs:6:10
|
--> $DIR/region-overlap.rs:6:10
|
||||||
|
|
|
|
||||||
LL | impl<'a> A for (&'a (), &'static ()) {}
|
LL | impl<'a> A for (&'a (), &'static ()) {}
|
||||||
| ^ cannot infer type for tuple `(&'a (), &'static ())`
|
| ^
|
||||||
|
|
|
|
||||||
note: multiple `impl`s satisfying `(&'a (), &'static ()): A` found
|
note: multiple `impl`s satisfying `(&'a (), &'static ()): A` found
|
||||||
--> $DIR/region-overlap.rs:5:1
|
--> $DIR/region-overlap.rs:5:1
|
||||||
|
@ -12,8 +12,6 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | Zero::ZERO ..= Zero::ZERO => {},
|
LL | Zero::ZERO ..= Zero::ZERO => {},
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -3,8 +3,10 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let x;
|
LL | let x;
|
||||||
| ^
|
| ^
|
||||||
|
...
|
||||||
|
LL | (..) => {}
|
||||||
|
| ---- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving `x` an explicit type
|
help: consider giving `x` an explicit type
|
||||||
|
|
|
|
||||||
LL | let x: _;
|
LL | let x: _;
|
||||||
|
@ -3,8 +3,9 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let x: Option<_> = None;
|
LL | let x: Option<_> = None;
|
||||||
| ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
|
| ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
|
||||||
|
LL | x.unwrap().method_that_could_exist_on_some_type();
|
||||||
|
| ---------- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider specifying the generic argument
|
help: consider specifying the generic argument
|
||||||
|
|
|
|
||||||
LL | let x: Option<_> = None::<T>;
|
LL | let x: Option<_> = None::<T>;
|
||||||
@ -16,7 +17,6 @@ error[E0282]: type annotations needed
|
|||||||
LL | .sum::<_>()
|
LL | .sum::<_>()
|
||||||
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider specifying the generic argument
|
help: consider specifying the generic argument
|
||||||
|
|
|
|
||||||
LL | .sum::<_>()
|
LL | .sum::<_>()
|
||||||
|
@ -3,8 +3,9 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let x: Option<_> = None;
|
LL | let x: Option<_> = None;
|
||||||
| ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
|
| ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
|
||||||
|
LL | x.unwrap().method_that_could_exist_on_some_type();
|
||||||
|
| ---------- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider specifying the generic argument
|
help: consider specifying the generic argument
|
||||||
|
|
|
|
||||||
LL | let x: Option<_> = None::<T>;
|
LL | let x: Option<_> = None::<T>;
|
||||||
@ -16,7 +17,6 @@ error[E0282]: type annotations needed
|
|||||||
LL | .sum::<_>()
|
LL | .sum::<_>()
|
||||||
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider specifying the generic argument
|
help: consider specifying the generic argument
|
||||||
|
|
|
|
||||||
LL | .sum::<S>()
|
LL | .sum::<S>()
|
||||||
|
@ -3,8 +3,10 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let mut x = Default::default();
|
LL | let mut x = Default::default();
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
LL |
|
||||||
|
LL | x.0;
|
||||||
|
| - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving `x` an explicit type
|
help: consider giving `x` an explicit type
|
||||||
|
|
|
|
||||||
LL | let mut x: _ = Default::default();
|
LL | let mut x: _ = Default::default();
|
||||||
@ -15,8 +17,10 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let mut x = Default::default();
|
LL | let mut x = Default::default();
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
LL |
|
||||||
|
LL | x[0];
|
||||||
|
| - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving `x` an explicit type
|
help: consider giving `x` an explicit type
|
||||||
|
|
|
|
||||||
LL | let mut x: _ = Default::default();
|
LL | let mut x: _ = Default::default();
|
||||||
|
@ -4,7 +4,6 @@ error[E0282]: type annotations needed
|
|||||||
LL | let _ = (vec![1,2,3]).into_iter().sum() as f64;
|
LL | let _ = (vec![1,2,3]).into_iter().sum() as f64;
|
||||||
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
| ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider specifying the generic argument
|
help: consider specifying the generic argument
|
||||||
|
|
|
|
||||||
LL | let _ = (vec![1,2,3]).into_iter().sum::<S>() as f64;
|
LL | let _ = (vec![1,2,3]).into_iter().sum::<S>() as f64;
|
||||||
|
@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `[_; 0]`
|
|||||||
--> $DIR/suggest-closure-return-type-1.rs:4:18
|
--> $DIR/suggest-closure-return-type-1.rs:4:18
|
||||||
|
|
|
|
||||||
LL | unbound_drop(|| -> _ { [] });
|
LL | unbound_drop(|| -> _ { [] });
|
||||||
| ^^^^^^^
|
| ^^^^^^^ -- type must be known at this point
|
||||||
|
|
|
|
||||||
help: try giving this closure an explicit return type
|
help: try giving this closure an explicit return type
|
||||||
|
|
|
|
||||||
|
@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `[_; 0]`
|
|||||||
--> $DIR/suggest-closure-return-type-2.rs:4:18
|
--> $DIR/suggest-closure-return-type-2.rs:4:18
|
||||||
|
|
|
|
||||||
LL | unbound_drop(|| { [] })
|
LL | unbound_drop(|| { [] })
|
||||||
| ^^
|
| ^^ -- type must be known at this point
|
||||||
|
|
|
|
||||||
help: try giving this closure an explicit return type
|
help: try giving this closure an explicit return type
|
||||||
|
|
|
|
||||||
|
@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `[_; 0]`
|
|||||||
--> $DIR/suggest-closure-return-type-3.rs:4:18
|
--> $DIR/suggest-closure-return-type-3.rs:4:18
|
||||||
|
|
|
|
||||||
LL | unbound_drop(|| []);
|
LL | unbound_drop(|| []);
|
||||||
| ^^
|
| ^^ -- type must be known at this point
|
||||||
|
|
|
|
||||||
help: try giving this closure an explicit return type
|
help: try giving this closure an explicit return type
|
||||||
|
|
|
|
||||||
|
@ -26,7 +26,9 @@ error[E0283]: type annotations needed
|
|||||||
--> $DIR/issue-77982.rs:8:10
|
--> $DIR/issue-77982.rs:8:10
|
||||||
|
|
|
|
||||||
LL | opts.get(opt.as_ref());
|
LL | opts.get(opt.as_ref());
|
||||||
| ^^^ cannot infer type of the type parameter `Q` declared on the associated function `get`
|
| ^^^ ------ type must be known at this point
|
||||||
|
| |
|
||||||
|
| cannot infer type of the type parameter `Q` declared on the associated function `get`
|
||||||
|
|
|
|
||||||
= note: multiple `impl`s satisfying `String: AsRef<_>` found in the following crates: `alloc`, `std`:
|
= note: multiple `impl`s satisfying `String: AsRef<_>` found in the following crates: `alloc`, `std`:
|
||||||
- impl AsRef<OsStr> for String;
|
- impl AsRef<OsStr> for String;
|
||||||
@ -42,7 +44,9 @@ error[E0283]: type annotations needed
|
|||||||
--> $DIR/issue-77982.rs:13:59
|
--> $DIR/issue-77982.rs:13:59
|
||||||
|
|
|
|
||||||
LL | let ips: Vec<_> = (0..100_000).map(|_| u32::from(0u32.into())).collect();
|
LL | let ips: Vec<_> = (0..100_000).map(|_| u32::from(0u32.into())).collect();
|
||||||
| ^^^^
|
| --------- ^^^^
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
|
||||||
= note: multiple `impl`s satisfying `u32: From<_>` found in the following crates: `core`, `std`:
|
= note: multiple `impl`s satisfying `u32: From<_>` found in the following crates: `core`, `std`:
|
||||||
- impl From<Ipv4Addr> for u32;
|
- impl From<Ipv4Addr> for u32;
|
||||||
@ -59,7 +63,7 @@ error[E0283]: type annotations needed for `Box<T>`
|
|||||||
--> $DIR/issue-77982.rs:36:9
|
--> $DIR/issue-77982.rs:36:9
|
||||||
|
|
|
|
||||||
LL | let _ = ().foo();
|
LL | let _ = ().foo();
|
||||||
| ^
|
| ^ --- type must be known at this point
|
||||||
|
|
|
|
||||||
note: multiple `impl`s satisfying `(): Foo<'_, _>` found
|
note: multiple `impl`s satisfying `(): Foo<'_, _>` found
|
||||||
--> $DIR/issue-77982.rs:29:1
|
--> $DIR/issue-77982.rs:29:1
|
||||||
@ -77,7 +81,7 @@ error[E0283]: type annotations needed for `Box<T>`
|
|||||||
--> $DIR/issue-77982.rs:40:9
|
--> $DIR/issue-77982.rs:40:9
|
||||||
|
|
|
|
||||||
LL | let _ = (&()).bar();
|
LL | let _ = (&()).bar();
|
||||||
| ^
|
| ^ --- type must be known at this point
|
||||||
|
|
|
|
||||||
note: multiple `impl`s satisfying `&(): Bar<'_, _>` found
|
note: multiple `impl`s satisfying `&(): Bar<'_, _>` found
|
||||||
--> $DIR/issue-77982.rs:32:1
|
--> $DIR/issue-77982.rs:32:1
|
||||||
|
@ -5,7 +5,7 @@ trait Foo {}
|
|||||||
impl<'a, 'b, T> Foo for T
|
impl<'a, 'b, T> Foo for T
|
||||||
where
|
where
|
||||||
T: FnMut(&'a ()),
|
T: FnMut(&'a ()),
|
||||||
//~^ ERROR: type annotations needed [E0283]
|
//~^ ERROR: type annotations needed
|
||||||
T: FnMut(&'b ()),
|
T: FnMut(&'b ()),
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `T: FnMut<(&'a (),)>`
|
||||||
--> $DIR/issue-85735.rs:7:8
|
--> $DIR/issue-85735.rs:7:8
|
||||||
|
|
|
|
||||||
LL | T: FnMut(&'a ()),
|
LL | T: FnMut(&'a ()),
|
||||||
| ^^^^^^^^^^^^^ cannot infer type for type parameter `T`
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `T: FnMut<(&'a (),)>`
|
= note: cannot satisfy `T: FnMut<(&'a (),)>`
|
||||||
|
|
||||||
|
@ -2,9 +2,8 @@ error[E0282]: type annotations needed
|
|||||||
--> $DIR/closures_in_branches.rs:7:10
|
--> $DIR/closures_in_branches.rs:7:10
|
||||||
|
|
|
|
||||||
LL | |x| x.len()
|
LL | |x| x.len()
|
||||||
| ^
|
| ^ - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this closure parameter an explicit type
|
help: consider giving this closure parameter an explicit type
|
||||||
|
|
|
|
||||||
LL | |x: _| x.len()
|
LL | |x: _| x.len()
|
||||||
@ -14,9 +13,8 @@ error[E0282]: type annotations needed
|
|||||||
--> $DIR/closures_in_branches.rs:21:10
|
--> $DIR/closures_in_branches.rs:21:10
|
||||||
|
|
|
|
||||||
LL | |x| x.len()
|
LL | |x| x.len()
|
||||||
| ^
|
| ^ - type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving this closure parameter an explicit type
|
help: consider giving this closure parameter an explicit type
|
||||||
|
|
|
|
||||||
LL | |x: _| x.len()
|
LL | |x: _| x.len()
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed
|
||||||
--> $DIR/fallback.rs:24:5
|
--> $DIR/fallback.rs:24:5
|
||||||
|
|
|
|
||||||
|
LL | fn unconstrained_foo() -> Wrapper<Foo> {
|
||||||
|
| ------------ type must be known at this point
|
||||||
LL | Wrapper::Second
|
LL | Wrapper::Second
|
||||||
| ^^^^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the enum `Wrapper`
|
| ^^^^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the enum `Wrapper`
|
||||||
|
|
|
|
||||||
|
@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `[_; 0]`
|
|||||||
--> $DIR/cannot_infer_local_or_array.rs:2:9
|
--> $DIR/cannot_infer_local_or_array.rs:2:9
|
||||||
|
|
|
|
||||||
LL | let x = [];
|
LL | let x = [];
|
||||||
| ^
|
| ^ -- type must be known at this point
|
||||||
|
|
|
|
||||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||||
|
|
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed: cannot satisfy `&'a T: Foo`
|
||||||
--> $DIR/issue-40294.rs:6:19
|
--> $DIR/issue-40294.rs:6:19
|
||||||
|
|
|
|
||||||
LL | where &'a T : Foo,
|
LL | where &'a T : Foo,
|
||||||
| ^^^ cannot infer type for reference `&'a T`
|
| ^^^
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `&'a T: Foo`
|
= note: cannot satisfy `&'a T: Foo`
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ error[E0282]: type annotations needed
|
|||||||
|
|
|
|
||||||
LL | let x = buffer.last().unwrap().0.clone();
|
LL | let x = buffer.last().unwrap().0.clone();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for type parameter `T`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for type parameter `T`
|
||||||
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
|
|
||||||
error[E0609]: no field `0` on type `&_`
|
error[E0609]: no field `0` on type `&_`
|
||||||
--> $DIR/issue-65611.rs:59:36
|
--> $DIR/issue-65611.rs:59:36
|
||||||
|
@ -3,8 +3,10 @@ error[E0282]: type annotations needed for `Option<T>`
|
|||||||
|
|
|
|
||||||
LL | let mut closure0 = None;
|
LL | let mut closure0 = None;
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
...
|
||||||
|
LL | return c();
|
||||||
|
| --- type must be known at this point
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
|
||||||
help: consider giving `closure0` an explicit type, where the placeholders `_` are specified
|
help: consider giving `closure0` an explicit type, where the placeholders `_` are specified
|
||||||
|
|
|
|
||||||
LL | let mut closure0: Option<T> = None;
|
LL | let mut closure0: Option<T> = None;
|
||||||
|
Loading…
Reference in New Issue
Block a user