Simplify overly-cute array coding to avoid an apparent gcc bug, which

may or may not be harmless.  Report from Stefan, patch from Heikki.
This commit is contained in:
Tom Lane 2007-07-12 23:10:57 +00:00
parent 4bbb7f9469
commit 4f09b55dc3

View File

@ -194,19 +194,18 @@ show_trgm(PG_FUNCTION_ARGS)
Datum *d; Datum *d;
ArrayType *a; ArrayType *a;
trgm *ptr; trgm *ptr;
int i;
trg = generate_trgm(VARDATA(in), VARSIZE(in) - VARHDRSZ); trg = generate_trgm(VARDATA(in), VARSIZE(in) - VARHDRSZ);
d = (Datum *) palloc(sizeof(Datum) * (1 + ARRNELEM(trg))); d = (Datum *) palloc(sizeof(Datum) * (1 + ARRNELEM(trg)));
ptr = GETARR(trg); for (i = 0, ptr = GETARR(trg); i < ARRNELEM(trg); i++, ptr++)
while (ptr - GETARR(trg) < ARRNELEM(trg))
{ {
text *item = (text *) palloc(VARHDRSZ + 3); text *item = (text *) palloc(VARHDRSZ + 3);
SET_VARSIZE(item, VARHDRSZ + 3); SET_VARSIZE(item, VARHDRSZ + 3);
CPTRGM(VARDATA(item), ptr); CPTRGM(VARDATA(item), ptr);
d[ptr - GETARR(trg)] = PointerGetDatum(item); d[i] = PointerGetDatum(item);
ptr++;
} }
a = construct_array( a = construct_array(
@ -218,12 +217,8 @@ show_trgm(PG_FUNCTION_ARGS)
'i' 'i'
); );
ptr = GETARR(trg); for (i = 0; i < ARRNELEM(trg); i++)
while (ptr - GETARR(trg) < ARRNELEM(trg)) pfree(DatumGetPointer(d[i]));
{
pfree(DatumGetPointer(d[ptr - GETARR(trg)]));
ptr++;
}
pfree(d); pfree(d);
pfree(trg); pfree(trg);