isl_basic_set_lift: properly update the number of extra variables
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 7 Dec 2010 09:36:51 +0000 (10:36 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 7 Dec 2010 09:40:16 +0000 (10:40 +0100)
Updating this number is essential for maintaining a proper internal state.

Reported-by: Tobias Grosser <grosser@fim.uni-passau.de>
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
isl_map.c
isl_test.c

index 335fad0..6f616cd 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -7144,6 +7144,7 @@ __isl_give isl_basic_set *isl_basic_set_lift(__isl_take isl_basic_set *bset)
                goto error;
        isl_dim_free(bset->dim);
        bset->dim = dim;
+       bset->extra -= bset->n_div;
        bset->n_div = 0;
 
        bset = isl_basic_set_finalize(bset);
index 8501e84..ab446a2 100644 (file)
@@ -1563,6 +1563,20 @@ void test_bound(isl_ctx *ctx)
        isl_pw_qpolynomial_fold_free(pwf);
 }
 
+void test_lift(isl_ctx *ctx)
+{
+       const char *str;
+       isl_basic_map *bmap;
+       isl_basic_set *bset;
+
+       str = "{ [i0] : exists e0 : i0 = 4e0 }";
+       bset = isl_basic_set_read_from_str(ctx, str, 0);
+       bset = isl_basic_set_lift(bset);
+       bmap = isl_basic_map_from_range(bset);
+       bset = isl_basic_map_domain(bmap);
+       isl_basic_set_free(bset);
+}
+
 int main()
 {
        struct isl_ctx *ctx;
@@ -1571,6 +1585,7 @@ int main()
        assert(srcdir);
 
        ctx = isl_ctx_alloc();
+       test_lift(ctx);
        test_bound(ctx);
        test_union(ctx);
        test_split_periods(ctx);