From a22b3cdceecb85bf55a21e15959d639d98f6da5e Mon Sep 17 00:00:00 2001 From: llogiq Date: Fri, 21 Aug 2015 12:26:03 +0200 Subject: [PATCH] const folding for eq_op --- src/eq_op.rs | 5 +++-- tests/compile-fail/eq_op.rs | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/eq_op.rs b/src/eq_op.rs index 6202dcc3670..ebc6aa17100 100644 --- a/src/eq_op.rs +++ b/src/eq_op.rs @@ -33,7 +33,7 @@ impl LintPass for EqOp { } pub fn is_exp_equal(cx: &Context, left : &Expr, right : &Expr) -> bool { - match (&left.node, &right.node) { + if match (&left.node, &right.node) { (&ExprBinary(ref lop, ref ll, ref lr), &ExprBinary(ref rop, ref rl, ref rr)) => lop.node == rop.node && @@ -66,7 +66,8 @@ pub fn is_exp_equal(cx: &Context, left : &Expr, right : &Expr) -> bool { lunop == runop && is_exp_equal(cx, l, r), (&ExprVec(ref l), &ExprVec(ref r)) => is_exps_equal(cx, l, r), _ => false - } || match (constant(cx, left), constant(cx, right)) { + } { return true; } + match (constant(cx, left), constant(cx, right)) { (Some(l), Some(r)) => l == r, _ => false } diff --git a/tests/compile-fail/eq_op.rs b/tests/compile-fail/eq_op.rs index 8f61a11aa08..a1183629344 100755 --- a/tests/compile-fail/eq_op.rs +++ b/tests/compile-fail/eq_op.rs @@ -34,4 +34,8 @@ fn main() { ((1, 2) != (1, 2)); //~ERROR equal expressions [1].len() == [1].len(); //~ERROR equal expressions vec![1, 2, 3] == vec![1, 2, 3]; //no error yet, as we don't match macros + + // const folding + 1 + 1 == 2; //~ERROR equal expressions + 1 - 1 == 0; //~ERROR equal expressions }