mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Rollup merge of #110550 - compiler-errors:deref-on-binop-rhs, r=wesleywiser
Suggest deref on comparison binop RHS even if type is not Copy Fixes #110500
This commit is contained in:
commit
8e6fffcbaa
@ -1508,6 +1508,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
// FIXME(compiler-errors): We can actually do this if the checked_ty is
|
// FIXME(compiler-errors): We can actually do this if the checked_ty is
|
||||||
// `steps` layers of boxes, not just one, but this is easier and most likely.
|
// `steps` layers of boxes, not just one, but this is easier and most likely.
|
||||||
|| (checked_ty.is_box() && steps == 1)
|
|| (checked_ty.is_box() && steps == 1)
|
||||||
|
// We can always deref a binop that takes its arguments by ref.
|
||||||
|
|| matches!(
|
||||||
|
self.tcx.hir().get_parent(expr.hir_id),
|
||||||
|
hir::Node::Expr(hir::Expr { kind: hir::ExprKind::Binary(op, ..), .. })
|
||||||
|
if !op.node.is_by_value()
|
||||||
|
)
|
||||||
{
|
{
|
||||||
let deref_kind = if checked_ty.is_box() {
|
let deref_kind = if checked_ty.is_box() {
|
||||||
"unboxing the value"
|
"unboxing the value"
|
||||||
|
@ -72,4 +72,13 @@ fn main() {
|
|||||||
} else {
|
} else {
|
||||||
&0
|
&0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[derive(PartialEq, Eq)]
|
||||||
|
struct Foo;
|
||||||
|
let foo = Foo;
|
||||||
|
let bar = &Foo;
|
||||||
|
|
||||||
|
if foo == bar {
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,6 +175,19 @@ LL | || };
|
|||||||
| |_____`if` and `else` have incompatible types
|
| |_____`if` and `else` have incompatible types
|
||||||
| expected `i32`, found `&{integer}`
|
| expected `i32`, found `&{integer}`
|
||||||
|
|
||||||
error: aborting due to 13 previous errors
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/deref-suggestion.rs:81:15
|
||||||
|
|
|
||||||
|
LL | if foo == bar {
|
||||||
|
| --- ^^^ expected `Foo`, found `&Foo`
|
||||||
|
| |
|
||||||
|
| expected because this is `Foo`
|
||||||
|
|
|
||||||
|
help: consider dereferencing the borrow
|
||||||
|
|
|
||||||
|
LL | if foo == *bar {
|
||||||
|
| +
|
||||||
|
|
||||||
|
error: aborting due to 14 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0308`.
|
For more information about this error, try `rustc --explain E0308`.
|
||||||
|
Loading…
Reference in New Issue
Block a user