Add a lib/interval sharedEmptyRange global
diff --git a/lib/interval/interval.go b/lib/interval/interval.go
index c1a3c1b..c648ae2 100644
--- a/lib/interval/interval.go
+++ b/lib/interval/interval.go
@@ -39,7 +39,13 @@
 )
 
 var (
-	one = big.NewInt(1)
+	minusOne = big.NewInt(-1)
+	one      = big.NewInt(+1)
+
+	// sharedEmptyRange is an emtpy IntRange. Users should not modify it. It is
+	// not exported, directly or indirectly (by another function returning its
+	// elements).
+	sharedEmptyRange = IntRange{one, minusOne}
 )
 
 var smallBitMasks = [...]*big.Int{
@@ -308,13 +314,13 @@
 // any negative or non-negative elements.
 func (x IntRange) split2Ways() (neg IntRange, nonNeg IntRange) {
 	if x.Empty() {
-		return makeEmptyRange(), makeEmptyRange()
+		return sharedEmptyRange, sharedEmptyRange
 	}
 	if x[0] != nil && x[0].Sign() >= 0 {
-		return makeEmptyRange(), x
+		return sharedEmptyRange, x
 	}
 	if x[1] != nil && x[1].Sign() < 0 {
-		return x, makeEmptyRange()
+		return x, sharedEmptyRange
 	}
 
 	neg[0] = x[0]
@@ -337,10 +343,10 @@
 // negative or positive elements.
 func (x IntRange) split() (neg IntRange, pos IntRange, negEmpty bool, hasZero bool, posEmpty bool) {
 	if x[0] != nil && x[0].Sign() > 0 {
-		return makeEmptyRange(), x, true, false, x.Empty()
+		return sharedEmptyRange, x, true, false, x.Empty()
 	}
 	if x[1] != nil && x[1].Sign() < 0 {
-		return x, makeEmptyRange(), x.Empty(), false, true
+		return x, sharedEmptyRange, x.Empty(), false, true
 	}
 
 	neg[0] = x[0]
diff --git a/lib/interval/interval_test.go b/lib/interval/interval_test.go
index dcd29c1..fad3597 100644
--- a/lib/interval/interval_test.go
+++ b/lib/interval/interval_test.go
@@ -283,8 +283,8 @@
 			tt.Errorf("%s.Empty(): got %t, want %t", tc.s, got, want)
 		} else if !got {
 			eqTestCases = append(eqTestCases, x)
-		} else if !x.Eq(makeEmptyRange()) {
-			tt.Errorf("%v eq %v: got %t, want %t", x, makeEmptyRange(), got, want)
+		} else if !x.Eq(sharedEmptyRange) {
+			tt.Errorf("%v eq %v: got %t, want %t", x, sharedEmptyRange, got, want)
 		}
 
 		if got, want := x.justZero(), tc.s == "[ 0,  0]"; got != want {
@@ -929,7 +929,7 @@
 			x := IntRange{x0, x1}
 			want := zero
 			if x.Empty() {
-				want = makeEmptyRange()
+				want = sharedEmptyRange
 			}
 
 			if got, _ := x.And(zero); !got.Eq(want) {
@@ -949,7 +949,7 @@
 			x := IntRange{x0, x1}
 			want := minusOne
 			if x.Empty() {
-				want = makeEmptyRange()
+				want = sharedEmptyRange
 			}
 
 			if got, _ := x.Or(minusOne); !got.Eq(want) {