summaryrefslogtreecommitdiff
path: root/isl_polynomial.c
diff options
context:
space:
mode:
Diffstat (limited to 'isl_polynomial.c')
-rw-r--r--isl_polynomial.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/isl_polynomial.c b/isl_polynomial.c
index a69b654a..984342d3 100644
--- a/isl_polynomial.c
+++ b/isl_polynomial.c
@@ -1112,7 +1112,8 @@ __isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp)
return isl_qpolynomial_dup(qp);
}
-void *isl_qpolynomial_free(__isl_take isl_qpolynomial *qp)
+__isl_null isl_qpolynomial *isl_qpolynomial_free(
+ __isl_take isl_qpolynomial *qp)
{
if (!qp)
return NULL;
@@ -1370,6 +1371,7 @@ static __isl_give isl_qpolynomial *with_merged_divs(
int *exp1 = NULL;
int *exp2 = NULL;
isl_mat *div = NULL;
+ int n_div1, n_div2;
qp1 = isl_qpolynomial_cow(qp1);
qp2 = isl_qpolynomial_cow(qp2);
@@ -1380,9 +1382,11 @@ static __isl_give isl_qpolynomial *with_merged_divs(
isl_assert(qp1->div->ctx, qp1->div->n_row >= qp2->div->n_row &&
qp1->div->n_col >= qp2->div->n_col, goto error);
- exp1 = isl_alloc_array(qp1->div->ctx, int, qp1->div->n_row);
- exp2 = isl_alloc_array(qp2->div->ctx, int, qp2->div->n_row);
- if (!exp1 || !exp2)
+ n_div1 = qp1->div->n_row;
+ n_div2 = qp2->div->n_row;
+ exp1 = isl_alloc_array(qp1->div->ctx, int, n_div1);
+ exp2 = isl_alloc_array(qp2->div->ctx, int, n_div2);
+ if ((n_div1 && !exp1) || (n_div2 && !exp2))
goto error;
div = isl_merge_divs(qp1->div, qp2->div, exp1, exp2);
@@ -2292,7 +2296,8 @@ __isl_give isl_qpolynomial *isl_qpolynomial_val_on_domain(
if (!domain || !val)
goto error;
- qp = isl_qpolynomial_alloc(domain, 0, isl_upoly_zero(domain->ctx));
+ qp = isl_qpolynomial_alloc(isl_space_copy(domain), 0,
+ isl_upoly_zero(domain->ctx));
if (!qp)
goto error;
@@ -2300,6 +2305,7 @@ __isl_give isl_qpolynomial *isl_qpolynomial_val_on_domain(
isl_int_set(cst->n, val->n);
isl_int_set(cst->d, val->d);
+ isl_space_free(domain);
isl_val_free(val);
return qp;
error:
@@ -3086,6 +3092,9 @@ __isl_give isl_qpolynomial *isl_qpolynomial_move_dims(
unsigned g_src_pos;
int *reordering;
+ if (n == 0)
+ return qp;
+
qp = isl_qpolynomial_cow(qp);
if (!qp)
return NULL;
@@ -3992,7 +4001,7 @@ __isl_give isl_qpolynomial *isl_qpolynomial_morph_domain(
if (morph->inv->n_row != morph->inv->n_col)
n_sub += qp->div->n_row;
subs = isl_calloc_array(ctx, struct isl_upoly *, n_sub);
- if (!subs)
+ if (n_sub && !subs)
goto error;
for (i = 0; 1 + i < morph->inv->n_row; ++i)