diff --git a/.gitattributes b/.gitattributes
index c0bdd8e7919269ccfe6db4089b7647fb8d57a3cd..b088e7035685607b46b5e66e70cbd262492e5ac9 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -105,7 +105,6 @@ testfont binary
 /src/acconfig.h foreign_ident
 /src/aclocal.m4 foreign_ident
 /src/alloca.c foreign_ident
-/src/array.c foreign_ident
 /src/array.h foreign_ident
 /src/backend.c foreign_ident
 /src/backend.h foreign_ident
diff --git a/src/array.c b/src/array.c
index 3bda19735a273dbd25dce0d860053ae2a51772df..a87674f99334225285e0dfcc8325ebb427c3c6c2 100644
--- a/src/array.c
+++ b/src/array.c
@@ -22,7 +22,7 @@
 #include "security.h"
 #include "stuff.h"
 
-RCSID("$Id: array.c,v 1.54 1999/09/16 23:56:08 hubbe Exp $");
+RCSID("$Id$");
 
 struct array empty_array=
 {
@@ -1385,7 +1385,7 @@ node *make_node_from_array(struct array *a)
   if(a->type_field == BIT_INT)
   {
     for(e=0; e<a->size; e++)
-      if(ITEM(a)[e].u.integer != 0)
+      if(ITEM(a)[e].u.integer || SUBTYPEOF(ITEM(a)[e]))
 	break;
     if(e == a->size)
     {
@@ -1399,9 +1399,11 @@ node *make_node_from_array(struct array *a)
     {
       case BIT_INT:
 	for(e=1; e<a->size; e++)
-	  if(ITEM(a)[e].u.integer != ITEM(a)[0].u.integer)
+	  if((ITEM(a)[e].u.integer != ITEM(a)[0].u.integer) ||
+	     (SUBTYPEOF(ITEM(a)[e]) != SUBTYPEOF(ITEM(a)[0]))) {
 	    break;
-	if(e==a->size && ITEM(a)[0].u.integer==0)
+	  }
+	if(e==a->size && ITEM(a)[0].u.integer==0 && !SUBTYPEOF(ITEM(a)[0]))
 	  return mkefuncallnode("allocate",mkintnode(a->size));
 	break;