Split ObligationCauseCode::BinOp for unops to UnOp
This commit is contained in:
@@ -963,8 +963,8 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
trait_pred: ty::PolyTraitPredicate<'tcx>,
|
||||
err: &mut Diag<'_>,
|
||||
) -> bool {
|
||||
if let ObligationCauseCode::BinOp { lhs_hir_id, .. } = obligation.cause.code()
|
||||
&& let hir::Node::Expr(expr) = self.tcx.hir_node(*lhs_hir_id)
|
||||
if let ObligationCauseCode::UnOp { hir_id, .. } = obligation.cause.code()
|
||||
&& let hir::Node::Expr(expr) = self.tcx.hir_node(*hir_id)
|
||||
&& let hir::ExprKind::Unary(hir::UnOp::Neg, inner) = expr.kind
|
||||
&& let hir::ExprKind::Lit(lit) = inner.kind
|
||||
&& let LitKind::Int(_, LitIntType::Unsuffixed) = lit.node
|
||||
@@ -2769,9 +2769,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
suggested: bool,
|
||||
) {
|
||||
let body_def_id = obligation.cause.body_id;
|
||||
let span = if let ObligationCauseCode::BinOp { rhs_span: Some(rhs_span), .. } =
|
||||
obligation.cause.code()
|
||||
{
|
||||
let span = if let ObligationCauseCode::BinOp { rhs_span, .. } = obligation.cause.code() {
|
||||
*rhs_span
|
||||
} else {
|
||||
span
|
||||
|
||||
@@ -554,7 +554,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
return true;
|
||||
}
|
||||
} else if let (
|
||||
ObligationCauseCode::BinOp { lhs_hir_id, rhs_hir_id: Some(rhs_hir_id), .. },
|
||||
ObligationCauseCode::BinOp { lhs_hir_id, rhs_hir_id, .. },
|
||||
predicate,
|
||||
) = code.peel_derives_with_predicate()
|
||||
&& let Some(typeck_results) = &self.typeck_results
|
||||
@@ -2801,6 +2801,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
| ObligationCauseCode::QuestionMark
|
||||
| ObligationCauseCode::CheckAssociatedTypeBounds { .. }
|
||||
| ObligationCauseCode::LetElse
|
||||
| ObligationCauseCode::UnOp { .. }
|
||||
| ObligationCauseCode::BinOp { .. }
|
||||
| ObligationCauseCode::AscribeUserTypeProvePredicate(..)
|
||||
| ObligationCauseCode::AlwaysApplicableImpl
|
||||
@@ -3839,9 +3840,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
trait_pred: ty::PolyTraitPredicate<'tcx>,
|
||||
) {
|
||||
let rhs_span = match obligation.cause.code() {
|
||||
ObligationCauseCode::BinOp { rhs_span: Some(span), rhs_is_lit, .. } if *rhs_is_lit => {
|
||||
span
|
||||
}
|
||||
ObligationCauseCode::BinOp { rhs_span, rhs_is_lit, .. } if *rhs_is_lit => rhs_span,
|
||||
_ => return,
|
||||
};
|
||||
if let ty::Float(_) = trait_pred.skip_binder().self_ty().kind()
|
||||
@@ -5108,16 +5107,12 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
let tcx = self.tcx;
|
||||
let predicate = predicate.upcast(tcx);
|
||||
match *cause_code {
|
||||
ObligationCauseCode::BinOp {
|
||||
lhs_hir_id,
|
||||
rhs_hir_id: Some(rhs_hir_id),
|
||||
rhs_span: Some(rhs_span),
|
||||
..
|
||||
} if let Some(typeck_results) = &self.typeck_results
|
||||
&& let hir::Node::Expr(lhs) = tcx.hir_node(lhs_hir_id)
|
||||
&& let hir::Node::Expr(rhs) = tcx.hir_node(rhs_hir_id)
|
||||
&& let Some(lhs_ty) = typeck_results.expr_ty_opt(lhs)
|
||||
&& let Some(rhs_ty) = typeck_results.expr_ty_opt(rhs) =>
|
||||
ObligationCauseCode::BinOp { lhs_hir_id, rhs_hir_id, rhs_span, .. }
|
||||
if let Some(typeck_results) = &self.typeck_results
|
||||
&& let hir::Node::Expr(lhs) = tcx.hir_node(lhs_hir_id)
|
||||
&& let hir::Node::Expr(rhs) = tcx.hir_node(rhs_hir_id)
|
||||
&& let Some(lhs_ty) = typeck_results.expr_ty_opt(lhs)
|
||||
&& let Some(rhs_ty) = typeck_results.expr_ty_opt(rhs) =>
|
||||
{
|
||||
if let Some(pred) = predicate.as_trait_clause()
|
||||
&& tcx.is_lang_item(pred.def_id(), LangItem::PartialEq)
|
||||
|
||||
Reference in New Issue
Block a user