Rollup merge of #106820 - m-ou-se:macro-type-error-thing, r=estebank
Deprioritize fulfillment errors that come from expansions. Fixes (part of?) #69455
This commit is contained in:
commit
f04f97cea4
@ -454,11 +454,13 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (error, suppressed) in iter::zip(errors, is_suppressed) {
|
for from_expansion in [false, true] {
|
||||||
if !suppressed {
|
for (error, suppressed) in iter::zip(errors, &is_suppressed) {
|
||||||
|
if !suppressed && error.obligation.cause.span.from_expansion() == from_expansion {
|
||||||
self.report_fulfillment_error(error, body_id);
|
self.report_fulfillment_error(error, body_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.tcx.sess.delay_span_bug(DUMMY_SP, "expected fullfillment errors")
|
self.tcx.sess.delay_span_bug(DUMMY_SP, "expected fullfillment errors")
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
error[E0282]: type annotations needed
|
error[E0282]: type annotations needed
|
||||||
--> $DIR/cannot-infer-partial-try-return.rs:20:9
|
--> $DIR/cannot-infer-partial-try-return.rs:20:9
|
||||||
|
|
|
|
||||||
LL | infallible()?;
|
|
||||||
| ------------- type must be known at this point
|
|
||||||
LL | Ok(())
|
LL | Ok(())
|
||||||
| ^^ cannot infer type of the type parameter `E` declared on the enum `Result`
|
| ^^ cannot infer type of the type parameter `E` declared on the enum `Result`
|
||||||
|
|
|
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
error[E0282]: type annotations needed
|
error[E0282]: type annotations needed
|
||||||
--> $DIR/question-mark-type-infer.rs:10:30
|
--> $DIR/question-mark-type-infer.rs:10:21
|
||||||
|
|
|
|
||||||
LL | l.iter().map(f).collect()?
|
LL | l.iter().map(f).collect()?
|
||||||
| ^ cannot infer type
|
| ^^^^^^^ cannot infer type of the type parameter `B` declared on the associated function `collect`
|
||||||
|
|
|
||||||
|
help: consider specifying the generic argument
|
||||||
|
|
|
||||||
|
LL | l.iter().map(f).collect::<Vec<_>>()?
|
||||||
|
| ++++++++++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
error[E0282]: type annotations needed
|
error[E0284]: type annotations needed
|
||||||
--> $DIR/issue-69455.rs:29:20
|
--> $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 `T` declared on the associated function `new_display`
|
| ---- ^^^ cannot infer type of the type parameter `S` declared on the associated function `sum`
|
||||||
|
| |
|
||||||
|
| type must be known at this point
|
||||||
|
|
|
|
||||||
= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: cannot satisfy `<u64 as Test<_>>::Output == _`
|
||||||
help: consider specifying the generic argument
|
help: consider specifying the generic argument
|
||||||
|
|
|
|
||||||
LL | println!("{}", 23u64.test(xs.iter().sum())::<T>);
|
LL | println!("{}", 23u64.test(xs.iter().sum::<S>()));
|
||||||
| +++++
|
| +++++
|
||||||
|
|
||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed
|
||||||
@ -33,5 +35,5 @@ LL | println!("{}", 23u64.test(xs.iter().sum::<S>()));
|
|||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0282, E0283.
|
Some errors have detailed explanations: E0283, E0284.
|
||||||
For more information about an error, try `rustc --explain E0282`.
|
For more information about an error, try `rustc --explain E0283`.
|
||||||
|
@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `(Vec<T>,)`
|
|||||||
--> $DIR/cannot_infer_local_or_vec_in_tuples.rs:2:9
|
--> $DIR/cannot_infer_local_or_vec_in_tuples.rs:2:9
|
||||||
|
|
|
|
||||||
LL | let (x, ) = (vec![], );
|
LL | let (x, ) = (vec![], );
|
||||||
| ^^^^^
|
| ^^^^^ ---------- type must be known at this point
|
||||||
|
|
|
|
||||||
help: consider giving this pattern a type, where the type for type parameter `T` is specified
|
help: consider giving this pattern a type, where the type for type parameter `T` is specified
|
||||||
|
|
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user