Skip to content

Commit

Permalink
Rollup merge of rust-lang#113945 - chenyukang:yukang-fix-113447-slice…
Browse files Browse the repository at this point in the history
…-2, r=cjgillot

Fix wrong span for trait selection failure error reporting

Fixes rust-lang#113447
  • Loading branch information
matthiaskrgr committed Aug 3, 2023
2 parents de5cff7 + 864368a commit 4c56f93
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2987,6 +2987,14 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
unsatisfied_const: bool,
) {
let body_def_id = obligation.cause.body_id;
let span = if let ObligationCauseCode::BinOp { rhs_span: Some(rhs_span), .. } =
obligation.cause.code()
{
*rhs_span
} else {
span
};

// Try to report a help message
if is_fn_trait
&& let Ok((implemented_kind, params)) = self.type_implements_fn_trait(
Expand Down
25 changes: 25 additions & 0 deletions tests/ui/dst/issue-113447.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// run-rustfix

pub struct Bytes;

impl Bytes {
pub fn as_slice(&self) -> &[u8] {
todo!()
}
}

impl PartialEq<[u8]> for Bytes {
fn eq(&self, other: &[u8]) -> bool {
self.as_slice() == other
}
}

impl PartialEq<Bytes> for &[u8] {
fn eq(&self, other: &Bytes) -> bool {
*other == **self
}
}

fn main() {
let _ = &[0u8] == &[0xAA][..]; //~ ERROR can't compare `&[u8; 1]` with `[{integer}; 1]`
}
25 changes: 25 additions & 0 deletions tests/ui/dst/issue-113447.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// run-rustfix

pub struct Bytes;

impl Bytes {
pub fn as_slice(&self) -> &[u8] {
todo!()
}
}

impl PartialEq<[u8]> for Bytes {
fn eq(&self, other: &[u8]) -> bool {
self.as_slice() == other
}
}

impl PartialEq<Bytes> for &[u8] {
fn eq(&self, other: &Bytes) -> bool {
*other == **self
}
}

fn main() {
let _ = &[0u8] == [0xAA]; //~ ERROR can't compare `&[u8; 1]` with `[{integer}; 1]`
}
25 changes: 25 additions & 0 deletions tests/ui/dst/issue-113447.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
error[E0277]: can't compare `&[u8; 1]` with `[{integer}; 1]`
--> $DIR/issue-113447.rs:24:20
|
LL | let _ = &[0u8] == [0xAA];
| ^^ no implementation for `&[u8; 1] == [{integer}; 1]`
|
= help: the trait `PartialEq<[{integer}; 1]>` is not implemented for `&[u8; 1]`
= help: the following other types implement trait `PartialEq<Rhs>`:
<[A; N] as PartialEq<[B; N]>>
<[A; N] as PartialEq<[B]>>
<[A; N] as PartialEq<&[B]>>
<[A; N] as PartialEq<&mut [B]>>
<[T] as PartialEq<Vec<U, A>>>
<[A] as PartialEq<[B]>>
<[B] as PartialEq<[A; N]>>
<&[u8] as PartialEq<Bytes>>
and 4 others
help: convert the array to a `&[u8]` slice instead
|
LL | let _ = &[0u8] == &[0xAA][..];
| + ++++

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.

0 comments on commit 4c56f93

Please sign in to comment.