Skip to content

Commit

Permalink
Deprioritize fulfillment errors that come from expansions.
Browse files Browse the repository at this point in the history
  • Loading branch information
m-ou-se committed Jan 14, 2023
1 parent 44a500c commit 6821adb
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -453,9 +453,11 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
}
}

for (error, suppressed) in iter::zip(errors, is_suppressed) {
if !suppressed {
self.report_fulfillment_error(error, body_id);
for from_expansion in [false, true] {
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);
}
}
}

Expand Down
2 changes: 0 additions & 2 deletions tests/ui/inference/cannot-infer-partial-try-return.stderr
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
error[E0282]: type annotations needed
--> $DIR/cannot-infer-partial-try-return.rs:20:9
|
LL | infallible()?;
| ------------- type must be known at this point
LL | Ok(())
| ^^ cannot infer type of the type parameter `E` declared on the enum `Result`
|
Expand Down
9 changes: 7 additions & 2 deletions tests/ui/inference/question-mark-type-infer.stderr
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
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()?
| ^ 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

Expand Down
18 changes: 10 additions & 8 deletions tests/ui/issues/issue-69455.stderr
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
error[E0282]: type annotations needed
--> $DIR/issue-69455.rs:29:20
error[E0284]: type annotations needed
--> $DIR/issue-69455.rs:29:41
|
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
|
LL | println!("{}", 23u64.test(xs.iter().sum())::<T>);
| +++++
LL | println!("{}", 23u64.test(xs.iter().sum::<S>()));
| +++++

error[E0283]: type annotations needed
--> $DIR/issue-69455.rs:29:41
Expand All @@ -33,5 +35,5 @@ LL | println!("{}", 23u64.test(xs.iter().sum::<S>()));

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0282, E0283.
For more information about an error, try `rustc --explain E0282`.
Some errors have detailed explanations: E0283, E0284.
For more information about an error, try `rustc --explain E0283`.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ error[E0282]: type annotations needed for `(Vec<T>,)`
--> $DIR/cannot_infer_local_or_vec_in_tuples.rs:2:9
|
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
|
Expand Down

0 comments on commit 6821adb

Please sign in to comment.