isl_tab_cone_is_bounded: start over after computing sign_of_max
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 20 Jul 2009 19:46:14 +0000 (21:46 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 20 Jul 2009 20:53:16 +0000 (22:53 +0200)
sign_of_max may have made some rows redundant and may therefore
invalidate the iteration over all non-redundant rows.

Problem reported by Uday Kumar <udayreddy@gmail.com>

isl_tab.c

index c675646..497743e 100644 (file)
--- a/isl_tab.c
+++ b/isl_tab.c
@@ -1094,19 +1094,22 @@ int isl_tab_cone_is_bounded(struct isl_tab *tab)
        if (tab->n_dead == tab->n_col)
                return 1;
 
-       for (i = tab->n_redundant; i < tab->n_row; ++i) {
-               struct isl_tab_var *var;
-               var = var_from_row(tab, i);
-               if (!var->is_nonneg)
-                       continue;
-               if (sign_of_max(tab, var) == 0)
+       for (;;) {
+               for (i = tab->n_redundant; i < tab->n_row; ++i) {
+                       struct isl_tab_var *var;
+                       var = var_from_row(tab, i);
+                       if (!var->is_nonneg)
+                               continue;
+                       if (sign_of_max(tab, var) != 0)
+                               return 0;
                        close_row(tab, var);
-               else
-                       return 0;
+                       break;
+               }
                if (tab->n_dead == tab->n_col)
                        return 1;
+               if (i == tab->n_row)
+                       return 0;
        }
-       return 0;
 }
 
 int isl_tab_sample_is_integer(struct isl_tab *tab)