barvinok_enumerate_with_options: handle context constraints on 0D input
authorSven Verdoolaege <skimo@kotnet.org>
Sun, 22 Jun 2014 07:10:20 +0000 (22 09:10 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sun, 22 Jun 2014 07:10:20 +0000 (22 09:10 +0200)
When the input of the internal enumerate has the same dimension
as the context, its constraints are moved to the context while
the input itself is replaced by a universe 0D polytope, resulting
in an evalue with value 1 on the constraints moved to the context.
The original context constraints would inadvertedly get dropped,
however.  Add them back.

For example, for this input

    0 3

    1 3
    1 1 0

we would mistakenly produce

      1 >= 0

    1

instead of the correct

     P  >= 0
      1 >= 0

    1

No test case is added because the default test mechanism only
checks the results inside the context and so it would not notice
that the result also has a non-zero value outside the context.
A specialized test case does not seem worth it as this is
an obsolescent interface and the new interface does not have
this problem since it internally calls enumerate with a universe context.

Reported-by: Thomas Kahle <tomka@gentoo.org>
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
barvinok.cc

index 5241b1e..4c8c4cd 100644 (file)
@@ -1311,7 +1311,7 @@ out:
        goto constant;
 
     if (P->Dimension == nparam) {
-       CEq = P;
+       CEq = DomainIntersection(P, C, options->MaxRays);
        P = Universe_Polyhedron(0);
        goto constant;
     }