diff --git a/contrib/intarray/_int_tool.c b/contrib/intarray/_int_tool.c
index 79f018d333b1d6810aa7fd2996c158b41b0263fb..132d15316054d842593468f191eca9053846f706 100644
--- a/contrib/intarray/_int_tool.c
+++ b/contrib/intarray/_int_tool.c
@@ -140,7 +140,8 @@ inner_int_inter(ArrayType *a, ArrayType *b)
 			   *db,
 			   *dr;
 	int			i,
-				j;
+				j,
+				k;
 
 	if (ARRISEMPTY(a) || ARRISEMPTY(b))
 		return new_intArrayType(0);
@@ -152,15 +153,15 @@ inner_int_inter(ArrayType *a, ArrayType *b)
 	r = new_intArrayType(Min(na, nb));
 	dr = ARRPTR(r);
 
-	i = j = 0;
+	i = j = k = 0;
 	while (i < na && j < nb)
 	{
 		if (da[i] < db[j])
 			i++;
 		else if (da[i] == db[j])
 		{
-			if (i + j == 0 || (i + j > 0 && *(dr - 1) != db[j]))
-				*dr++ = db[j];
+			if (k == 0 || dr[k - 1] != db[j])
+				dr[k++] = db[j];
 			i++;
 			j++;
 		}
@@ -168,13 +169,13 @@ inner_int_inter(ArrayType *a, ArrayType *b)
 			j++;
 	}
 
-	if ((dr - ARRPTR(r)) == 0)
+	if (k == 0)
 	{
 		pfree(r);
 		return new_intArrayType(0);
 	}
 	else
-		return resize_intArrayType(r, dr - ARRPTR(r));
+		return resize_intArrayType(r, k);
 }
 
 void
diff --git a/contrib/intarray/expected/_int.out b/contrib/intarray/expected/_int.out
index 6ed3cc6ced096e2e97665e76ceba7fc139415029..4080b9633fe98a91861684e0d82f1297c21b91af 100644
--- a/contrib/intarray/expected/_int.out
+++ b/contrib/intarray/expected/_int.out
@@ -137,6 +137,12 @@ SELECT '{123,623,445}'::int[] & '{1623,623}';
  {623}
 (1 row)
 
+SELECT '{-1,3,1}'::int[] & '{1,2}';
+ ?column? 
+----------
+ {1}
+(1 row)
+
 --test query_int
 SELECT '1'::query_int;
  query_int 
diff --git a/contrib/intarray/sql/_int.sql b/contrib/intarray/sql/_int.sql
index b60e936dc520d8308bd16e50681f061dc86e2dfe..216c5c58d615a7cd1a5fe3714c9a5c91fb255138 100644
--- a/contrib/intarray/sql/_int.sql
+++ b/contrib/intarray/sql/_int.sql
@@ -24,6 +24,7 @@ SELECT '{123,623,445}'::int[] | 623;
 SELECT '{123,623,445}'::int[] | 1623;
 SELECT '{123,623,445}'::int[] | '{1623,623}';
 SELECT '{123,623,445}'::int[] & '{1623,623}';
+SELECT '{-1,3,1}'::int[] & '{1,2}';
 
 
 --test query_int