Re: AW: AW: Could turn on -O2 in AIX - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: AW: AW: Could turn on -O2 in AIX |
Date | |
Msg-id | 21643.973891521@sss.pgh.pa.us Whole thread Raw |
In response to | AW: AW: Could turn on -O2 in AIX (Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at>) |
Responses |
Re: AW: AW: Could turn on -O2 in AIX
Re: AW: AW: Could turn on -O2 in AIX |
List | pgsql-hackers |
Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes: >> But that is unfortunately not the problem. Looks like yet >> another broken compiler to me :-( > Ok, the comparison ((int) time) > ((int) 0x80000001) is the problem. > Reading the comment again and again, I have come to the conclusion, > that the intent was originally to avoid INT_MIN on AIX. No, I think the other way round. Digging into Postgres 4.2, I find #if defined(PORTNAME_aix) /** AIX considers 2147483648 == -2147483648 (since they have the same bit* representation) but uses a different sign sensein a comparison to * these integer constants depending on whether the constant is signed * or not!*/ #include <values.h> #define NOSTART_ABSTIME ((AbsoluteTime) HIBITI) /* - 2^31 */ #else #define NOSTART_ABSTIME ((AbsoluteTime) 2147483648) /* - 2^31 */ #endif /* PORTNAME_aix */ where HIBITI must come from a system header, because it doesn't appear anywhere else in Postgres 4.2. But I'm betting it was a representation of 0x80000000. By the time of our oldest CVS sources, this had metamorphosed into #if defined(PORTNAME_aix) /** AIX considers 2147483648 == -2147483648 (since they have the same bit* representation) but uses a different sign sensein a comparison to * these integer constants depending on whether the constant is signed * or not!*/ #include <values.h> /*#define NOSTART_ABSTIME ((AbsoluteTime) HIBITI) */ /* - 2^31 */ #define NOSTART_ABSTIME ((AbsoluteTime) INT_MIN) #else /*#define NOSTART_ABSTIME ((AbsoluteTime) 2147483648)*/ /* - 2^31 */ #define NOSTART_ABSTIME ((AbsoluteTime) -2147483647) /* - 2^31 */ #endif /* PORTNAME_aix */ Hard to tell how we got from point A to point B, but it seems crystal-clear that the *original* author intended to use 0x80000000 on all platforms. > My solution would be to use INT_MIN for all ports, which has the advantage > that the above problematic comparison can be converted to !=, > since no integer will be smaller than INT_MIN. I agree. When I was looking at this code this morning, I was wondering what INT_MIN was supposed to represent anyway, if NOSTART_ABSTIME is INT_MIN + 1. I think someone messed this up between 4.2 and Postgres95. Thomas, any objection to this plan? regards, tom lane
pgsql-hackers by date: