Alvaro Herrera wrote:
Heikki Linnakangas wrote:
Alvaro Herrera wrote:
Stefan showed me via Jabber this warning:
/tmp/ccM7MfqX.s: Assembler messages:
/tmp/ccM7MfqX.s:703: Warning: 00000003fffffffc shortened to 00000000fffffffc /tmp/ccM7MfqX.s:738: Warning: 00000003fffffffc shortened to 00000000fffffffc
He says that this comes from trgm_op.c file.  I don't get the warning
myself obviously, so I started guessing.
3FFFFFFFC = 1111111111111111111111111111111100
 FFFFFFFC =   11111111111111111111111111111100
So the upper 2 bits are being lost (the second number is 32 bits wide).
The only thing that I think is related is the usage of VARSIZE().  It
looks like 0x3FFFFFFF (actual constant in the toast code) is shift two
bits left.  I can see no such operation though.
The shift is in postgres.h, SET_VARSIZE_4B. I have no idea where that warning is coming from, though. What's the real source behind "ccM7MfqX.s"?


I'm not sure that the shift in SET_VARSIZE_4B is applicable here,
because it would have to be passed a len of FFFFFFFF.

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);

Line 224:
        ptr = GETARR(trg);
        while (ptr - GETARR(trg) < ARRNELEM(trg))
                pfree(DatumGetPointer(d[ptr - GETARR(trg)]));

The warning seems to be in related array indexing. If you replace ptr - GETARR(trg) with a constant, the warning goes away. But having "i = ptr - GETARR(trg)" in there doesn't give a warning.

  Heikki Linnakangas

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to