From ca6e00701d0fdf5efb706e2f612be217005bb9be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Tue, 19 Mar 2019 14:47:58 +0100 Subject: [PATCH] Optimizer [array]: Keep UNDEFINED values. In some cases the array optimizer replaced UNDEFINED values with zeroes. --- .gitattributes | 1 - src/array.c | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitattributes b/.gitattributes index c0bdd8e791..b088e70356 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 3bda19735a..a87674f993 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; -- GitLab