Auto merge of #5702 - ebroto:5698_mul_not_comm, r=matthiaskrgr
if_same_then_else: don't assume multiplication is always commutative changelog: Don't assume multiplication is always commutative in [`if_same_then_else`] Fixes #5698
This commit is contained in:
commit
742706511c
@ -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 // Not always commutative, e.g. with matrices. See issue #5698
|
||||
| BinOpKind::Shl
|
||||
| BinOpKind::Shr
|
||||
| BinOpKind::Rem
|
||||
| BinOpKind::Sub
|
||||
|
@ -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() {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user