From 13e55f2d053ee697a2a96e6f40c9b670c7e4fe21 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 27 Jun 2013 11:01:13 +0300 Subject: [PATCH] comparison: inherited comparisons were reversed If you have code like: if (b >= c) return; a = c; then a > b but it was saying a < b. Signed-off-by: Dan Carpenter --- smatch_comparison.c | 8 ++++---- validation/sm_compare7.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 validation/sm_compare7.c diff --git a/smatch_comparison.c b/smatch_comparison.c index 74b12b17..7e13c35d 100644 --- a/smatch_comparison.c +++ b/smatch_comparison.c @@ -658,11 +658,11 @@ static void copy_comparisons(struct expression *left, struct expression *right) continue; data = state->data; comparison = data->comparison; - var = data->var1; - sym = data->sym1; + var = data->var2; + sym = data->sym2; if (sym == right_sym && strcmp(var, right_var) == 0) { - var = data->var2; - sym = data->sym2; + var = data->var1; + sym = data->sym1; comparison = flip_op(comparison); } add_comparison_var_sym(left_var, left_sym, comparison, var, sym); diff --git a/validation/sm_compare7.c b/validation/sm_compare7.c new file mode 100644 index 00000000..fb9de888 --- /dev/null +++ b/validation/sm_compare7.c @@ -0,0 +1,24 @@ +#include "check_debug.h" + +int a, b, c, e, f, g; +static int options_write(void) +{ + if (b >= c) + return; + a = c; + __smatch_compare(a, b); + if (f >= e) + return; + g = f; + __smatch_compare(g, e); +} + +/* + * check-name: smatch compare #7 + * check-command: smatch -I.. sm_compare7.c + * + * check-output-start +sm_compare7.c:9 options_write() a > b +sm_compare7.c:13 options_write() g < e + * check-output-end + */ -- 2.11.4.GIT