diff --git a/changelog.in b/changelog.in index 27918d6c45..ea427f5f2d 100755 --- a/changelog.in +++ b/changelog.in @@ -69,6 +69,14 @@ Date: 2020-??-?? [DESCRIPTION] Let's see. +[ENTRY] +Module: flatzinc +What: bug +Issue: 171 +Rank: minor +[DESCRIPTION] +Correctly unshare variables for inverse constraint. + [ENTRY] Module: flatzinc What: bug diff --git a/gecode/flatzinc/registry.cpp b/gecode/flatzinc/registry.cpp index 2b96a76429..e8db027039 100755 --- a/gecode/flatzinc/registry.cpp +++ b/gecode/flatzinc/registry.cpp @@ -1220,12 +1220,12 @@ namespace Gecode { namespace FlatZinc { void p_inverse_offsets(FlatZincSpace& s, const ConExpr& ce, AST::Node* ann) { IntVarArgs x = s.arg2intvarargs(ce[0]); - unshare(s, x); int xoff = ce[1]->getInt(); IntVarArgs y = s.arg2intvarargs(ce[2]); - unshare(s, y); int yoff = ce[3]->getInt(); - channel(s, x, xoff, y, yoff, s.ann2ipl(ann)); + IntVarArgs xy = x + y; + unshare(s, xy); + channel(s, xy.slice(0, 1, x.size()), xoff, xy.slice(x.size()), yoff, s.ann2ipl(ann)); } void