Re: compiler warnings on the buildfarm - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: compiler warnings on the buildfarm
Date
Msg-id 4696B045.8080405@enterprisedb.com
Whole thread Raw
In response to Re: compiler warnings on the buildfarm  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: compiler warnings on the buildfarm  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Tom Lane wrote:
> Heikki Linnakangas <heikki@enterprisedb.com> writes:
>> Hmm. It looks like I get that warning on my laptop as well. I tracked it
>> down to these two places:
>
>> Line 209:
>>> while (ptr - GETARR(trg) < ARRNELEM(trg))
>>> {
>>>     text       *item = (text *) palloc(VARHDRSZ + 3);
>>>
>>>     SET_VARSIZE(item, VARHDRSZ + 3);
>>>     CPTRGM(VARDATA(item), ptr);
>>>>>     d[ptr - GETARR(trg)] = PointerGetDatum(item);
>>>     ptr++;
>>> }
>
> I'll betcha the compiler is trying to optimize the repeated calculations
> of "ptr - GETARR(trg)" into a separate variable that it increments along
> with ptr.  Maybe it is getting it wrong, or maybe the assembler is just
> confused.  Does the warning go away if you dial down the -O level?

FWIW, this patch makes the warnings go away, and makes the code a little
bit more readable as well. It would be nice to understand why exactly
it's complaining, though.

--
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com
Index: trgm_op.c
===================================================================
RCS file: /home/hlinnaka/pgcvsrepository/pgsql/contrib/pg_trgm/trgm_op.c,v
retrieving revision 1.8
diff -c -r1.8 trgm_op.c
*** trgm_op.c    28 Feb 2007 22:44:38 -0000    1.8
--- trgm_op.c    12 Jul 2007 22:28:43 -0000
***************
*** 194,212 ****
      Datum       *d;
      ArrayType  *a;
      trgm       *ptr;

      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))
      {
          text       *item = (text *) palloc(VARHDRSZ + 3);

          SET_VARSIZE(item, VARHDRSZ + 3);
          CPTRGM(VARDATA(item), ptr);
!         d[ptr - GETARR(trg)] = PointerGetDatum(item);
!         ptr++;
      }

      a = construct_array(
--- 194,211 ----
      Datum       *d;
      ArrayType  *a;
      trgm       *ptr;
+     int            i;

      trg = generate_trgm(VARDATA(in), VARSIZE(in) - VARHDRSZ);
      d = (Datum *) palloc(sizeof(Datum) * (1 + 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[i] = PointerGetDatum(item);
      }

      a = construct_array(
***************
*** 218,229 ****
                          'i'
          );

!     ptr = GETARR(trg);
!     while (ptr - GETARR(trg) < ARRNELEM(trg))
!     {
!         pfree(DatumGetPointer(d[ptr - GETARR(trg)]));
!         ptr++;
!     }

      pfree(d);
      pfree(trg);
--- 217,224 ----
                          'i'
          );

!     for (i = 0; i < ARRNELEM(trg); i++)
!         pfree(DatumGetPointer(d[i]));

      pfree(d);
      pfree(trg);

pgsql-hackers by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: compiler warnings on the buildfarm
Next
From: Andrew Dunstan
Date:
Subject: Re: compiler warnings on the buildfarm