Closed
Description
Commit dcd716f (#86986) appears to have regressed the quality of compiler diagnostics produced when an array type does not satisfy a trait but its slice version does (there may be other scenarios that see similar regressions, but this is where I've seen it).
This is currently blocking #91314.
Motivating example (playground):
trait Read {}
impl Read for &[u8] {}
fn wants_read(_: impl Read) {}
fn main() {
wants_read([0u8]);
}
When compiled on dcd716f~1 (83b32f2), rustc provides a help message telling the user that the trait is implemented for slices:
error[E0277]: the trait bound `[u8; 1]: Read` is not satisfied
--> ../scratch/issue-90528-unsizing-suggestion-1.rs:8:16
|
8 | wants_read([0u8]);
| ---------- ^^^^^ the trait `Read` is not implemented for `[u8; 1]`
| |
| required by a bound introduced by this call
|
= help: the following implementations were found:
<&[u8] as Read>
note: required by a bound in `wants_read`
--> ../scratch/issue-90528-unsizing-suggestion-1.rs:5:23
|
5 | fn wants_read(_: impl Read) {}
| ^^^^ required by this bound in `wants_read`
Compiled on dcd716f, this help message no longer appears:
error[E0277]: the trait bound `[u8; 1]: Read` is not satisfied
--> ../scratch/issue-90528-unsizing-suggestion-1.rs:8:16
|
8 | wants_read([0u8]);
| ---------- ^^^^^ the trait `Read` is not implemented for `[u8; 1]`
| |
| required by a bound introduced by this call
|
note: required by a bound in `wants_read`
--> ../scratch/issue-90528-unsizing-suggestion-1.rs:5:23
|
5 | fn wants_read(_: impl Read) {}
| ^^^^ required by this bound in `wants_read`
Inspiration for regression tests can be taken from #91314.
@rustbot modify labels: +A-diagnostics +T-compiler +D-terse
cc @lcnr
Metadata
Metadata
Assignees
Labels
Area: Messages for errors, warnings, and lintsArea: Trait systemCategory: This is a bug.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.Low priorityRelevant to the compiler team, which will review and decide on the PR/issue.Performance or correctness regression from one stable version to another.