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
|
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: