fix isl_qpolynomial_fold_reset_dim
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 17 Aug 2010 07:47:21 +0000 (09:47 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 18 Aug 2010 13:36:54 +0000 (15:36 +0200)
In particular, the old version wouldn't cow and it wouldn't change
the dimension of the nested isl_qpolynomials.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
isl_fold.c
isl_polynomial.c

index fd50f90..6d30d1c 100644 (file)
@@ -46,9 +46,19 @@ error:
 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_dim(
        __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim)
 {
+       int i;
+
+       fold = isl_qpolynomial_fold_cow(fold);
        if (!fold || !dim)
                goto error;
 
+       for (i = 0; i < fold->n; ++i) {
+               fold->qp[i] = isl_qpolynomial_reset_dim(fold->qp[i],
+                                                       isl_dim_copy(dim));
+               if (!fold->qp[i])
+                       goto error;
+       }
+
        isl_dim_free(fold->dim);
        fold->dim = dim;
 
index 777c701..5cadabf 100644 (file)
@@ -322,6 +322,7 @@ __isl_give struct isl_upoly_rec *isl_upoly_alloc_rec(struct isl_ctx *ctx,
 __isl_give isl_qpolynomial *isl_qpolynomial_reset_dim(
        __isl_take isl_qpolynomial *qp, __isl_take isl_dim *dim)
 {
+       qp = isl_qpolynomial_cow(qp);
        if (!qp || !dim)
                goto error;