Simplify overly-cute array coding to avoid an apparent gcc bug, which
authorTom Lane
Thu, 12 Jul 2007 23:10:57 +0000 (23:10 +0000)
committerTom Lane
Thu, 12 Jul 2007 23:10:57 +0000 (23:10 +0000)
may or may not be harmless.  Report from Stefan, patch from Heikki.

contrib/pg_trgm/trgm_op.c

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