if_same_then_else: don't assume multiplication is always commutative

This commit is contained in:
Eduardo Broto 2020-06-09 23:49:21 +02:00
parent f065d4b887
commit a083b84b78
2 changed files with 17 additions and 8 deletions

View file

@ -309,18 +309,15 @@ fn swap_binop<'a>(
rhs: &'a Expr<'a>,
) -> Option<(BinOpKind, &'a Expr<'a>, &'a Expr<'a>)> {
match binop {
BinOpKind::Add
| BinOpKind::Mul
| BinOpKind::Eq
| BinOpKind::Ne
| BinOpKind::BitAnd
| BinOpKind::BitXor
| BinOpKind::BitOr => Some((binop, rhs, lhs)),
BinOpKind::Add | BinOpKind::Eq | BinOpKind::Ne | BinOpKind::BitAnd | BinOpKind::BitXor | BinOpKind::BitOr => {
Some((binop, rhs, lhs))
},
BinOpKind::Lt => Some((BinOpKind::Gt, rhs, lhs)),
BinOpKind::Le => Some((BinOpKind::Ge, rhs, lhs)),
BinOpKind::Ge => Some((BinOpKind::Le, rhs, lhs)),
BinOpKind::Gt => Some((BinOpKind::Lt, rhs, lhs)),
BinOpKind::Shl
BinOpKind::Mul
| BinOpKind::Shl
| BinOpKind::Shr
| BinOpKind::Rem
| BinOpKind::Sub

View file

@ -142,4 +142,16 @@ fn func() {
fn f(val: &[u8]) {}
mod issue_5698 {
fn mul_not_always_commutative(x: i32, y: i32) -> i32 {
if x == 42 {
x * y
} else if x == 21 {
y * x
} else {
0
}
}
}
fn main() {}