diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index daebd9d5e2..c746c2319c 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -154,7 +154,7 @@ ts_dist(PG_FUNCTION_ARGS) p->day = INT_MAX; p->month = INT_MAX; #ifdef HAVE_INT64_TIMESTAMP - p->time = INT64_MAX; + p->time = PG_INT64_MAX; #else p->time = DBL_MAX; #endif @@ -182,7 +182,7 @@ tstz_dist(PG_FUNCTION_ARGS) p->day = INT_MAX; p->month = INT_MAX; #ifdef HAVE_INT64_TIMESTAMP - p->time = INT64_MAX; + p->time = PG_INT64_MAX; #else p->time = DBL_MAX; #endif diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index 822adfd581..321a6dbdc7 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -449,7 +449,7 @@ strtoint64(const char *str) */ if (strncmp(ptr, "9223372036854775808", 19) == 0) { - result = INT64_MIN; + result = PG_INT64_MIN; ptr += 19; goto gotdigits; } @@ -3521,7 +3521,7 @@ threadRun(void *arg) FD_ZERO(&input_mask); maxsock = -1; - min_usec = INT64_MAX; + min_usec = PG_INT64_MAX; for (i = 0; i < nstate; i++) { CState *st = &state[i]; @@ -3548,7 +3548,7 @@ threadRun(void *arg) { int this_usec; - if (min_usec == INT64_MAX) + if (min_usec == PG_INT64_MAX) { instr_time now; @@ -3584,7 +3584,7 @@ threadRun(void *arg) { int nsocks; /* return from select(2) */ - if (min_usec != INT64_MAX) + if (min_usec != PG_INT64_MAX) { struct timeval timeout; diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 751253ba03..346a2b39f8 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1408,7 +1408,7 @@ WALInsertLockAcquireExclusive(void) { LWLockAcquireWithVar(&WALInsertLocks[i].l.lock, &WALInsertLocks[i].l.insertingAt, - UINT64_MAX); + PG_UINT64_MAX); } LWLockAcquireWithVar(&WALInsertLocks[i].l.lock, &WALInsertLocks[i].l.insertingAt, diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index d95fdb1fab..18ff9e2961 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -2260,7 +2260,7 @@ mark_hl_fragments(HeadlineParsedText *prs, TSQuery query, int highlight, for (f = 0; f < max_fragments; f++) { maxitems = 0; - minwords = INT32_MAX; + minwords = PG_INT32_MAX; minI = -1; /* diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index b3a1191887..63a4fbb4a3 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -78,7 +78,7 @@ scanint8(const char *str, bool errorOK, int64 *result) */ if (strncmp(ptr, "9223372036854775808", 19) == 0) { - tmp = INT64_MIN; + tmp = PG_INT64_MIN; ptr += 19; goto gotdigits; } diff --git a/src/backend/utils/adt/numutils.c b/src/backend/utils/adt/numutils.c index 585da1e732..1dadbd597a 100644 --- a/src/backend/utils/adt/numutils.c +++ b/src/backend/utils/adt/numutils.c @@ -190,7 +190,7 @@ pg_lltoa(int64 value, char *a) * Avoid problems with the most negative integer not being representable * as a positive integer. */ - if (value == INT64_MIN) + if (value == PG_INT64_MIN) { memcpy(a, "-9223372036854775808", 21); return; diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 33e859d35e..86a014a2bb 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -3309,7 +3309,7 @@ interval_mul(PG_FUNCTION_ARGS) result->day += (int32) month_remainder_days; #ifdef HAVE_INT64_TIMESTAMP result_double = rint(span->time * factor + sec_remainder * USECS_PER_SEC); - if (result_double > INT64_MAX || result_double < INT64_MIN) + if (result_double > PG_INT64_MAX || result_double < PG_INT64_MIN) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("interval out of range"))); diff --git a/src/backend/utils/adt/txid.c b/src/backend/utils/adt/txid.c index 31f8033ae4..1d7bb02ca4 100644 --- a/src/backend/utils/adt/txid.c +++ b/src/backend/utils/adt/txid.c @@ -34,7 +34,7 @@ /* txid will be signed int8 in database, so must limit to 63 bits */ -#define MAX_TXID ((uint64) INT64_MAX) +#define MAX_TXID ((uint64) PG_INT64_MAX) /* Use unsigned variant internally */ typedef uint64 txid; diff --git a/src/include/c.h b/src/include/c.h index fd301b6da6..e63fd2f37d 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -249,36 +249,6 @@ typedef uint8 bits8; /* >= 8 bits */ typedef uint16 bits16; /* >= 16 bits */ typedef uint32 bits32; /* >= 32 bits */ -/* should be defined in stdint.h, but we guarantee them here */ -#ifndef INT8_MIN -#define INT8_MIN (-0x7F-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (0x7F) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-0x7FFF-1) -#endif -#ifndef INT16_MAX -#define INT16_MAX (0x7FFF) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-0x7FFFFFFF-1) -#endif -#ifndef INT32_MAX -#define INT32_MAX (0x7FFFFFFF) -#endif - -#ifndef UINT8_MAX -#define UINT8_MAX (0xFF) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (0xFFFF) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (0xFFFFFFFF) -#endif - /* * 64-bit integers */ @@ -314,26 +284,10 @@ typedef unsigned long long int uint64; #define UINT64CONST(x) ((uint64) x) #endif -/* should be defined in stdint.h, but we guarantee them here */ -#ifndef INT64_MIN -#define INT64_MIN (-INT64CONST(0x7FFFFFFFFFFFFFFF) - 1) -#endif -#ifndef INT64_MAX -#define INT64_MAX INT64CONST(0x7FFFFFFFFFFFFFFF) -#endif -#ifndef UINT64_MAX -#define UINT64_MAX UINT64CONST(0xFFFFFFFFFFFFFFFF) -#endif - /* snprintf format strings to use for 64-bit integers */ #define INT64_FORMAT "%" INT64_MODIFIER "d" #define UINT64_FORMAT "%" INT64_MODIFIER "u" -/* Select timestamp representation (float8 or int64) */ -#ifdef USE_INTEGER_DATETIMES -#define HAVE_INT64_TIMESTAMP -#endif - /* * 128-bit signed and unsigned integers * There currently is only a limited support for the type. E.g. 128bit @@ -345,6 +299,28 @@ typedef PG_INT128_TYPE int128; typedef unsigned PG_INT128_TYPE uint128; #endif +/* + * stdint.h limits aren't guaranteed to be present and aren't guaranteed to + * have compatible types with our fixed width types. So just define our own. + */ +#define PG_INT8_MIN (-0x7F-1) +#define PG_INT8_MAX (0x7F) +#define PG_UINT8_MAX (0xFF) +#define PG_INT16_MIN (-0x7FFF-1) +#define PG_INT16_MAX (0x7FFF) +#define PG_UINT16_MAX (0xFFFF) +#define PG_INT32_MIN (-0x7FFFFFFF-1) +#define PG_INT32_MAX (0x7FFFFFFF) +#define PG_UINT32_MAX (0xFFFFFFFF) +#define PG_INT64_MIN (-INT64CONST(0x7FFFFFFFFFFFFFFF) - 1) +#define PG_INT64_MAX INT64CONST(0x7FFFFFFFFFFFFFFF) +#define PG_UINT64_MAX UINT64CONST(0xFFFFFFFFFFFFFFFF) + +/* Select timestamp representation (float8 or int64) */ +#ifdef USE_INTEGER_DATETIMES +#define HAVE_INT64_TIMESTAMP +#endif + /* sig_atomic_t is required by ANSI C, but may be missing on old platforms */ #ifndef HAVE_SIG_ATOMIC_T typedef int sig_atomic_t; diff --git a/src/include/datatype/timestamp.h b/src/include/datatype/timestamp.h index d3450d69a8..e0e8e7c2f3 100644 --- a/src/include/datatype/timestamp.h +++ b/src/include/datatype/timestamp.h @@ -119,8 +119,8 @@ typedef struct * DT_NOBEGIN represents timestamp -infinity; DT_NOEND represents +infinity */ #ifdef HAVE_INT64_TIMESTAMP -#define DT_NOBEGIN INT64_MIN -#define DT_NOEND INT64_MAX +#define DT_NOBEGIN PG_INT64_MIN +#define DT_NOEND PG_INT64_MAX #else /* !HAVE_INT64_TIMESTAMP */ #ifdef HUGE_VAL #define DT_NOBEGIN (-HUGE_VAL) diff --git a/src/include/executor/instrument.h b/src/include/executor/instrument.h index db9d1e8ff0..c9a2129c7a 100644 --- a/src/include/executor/instrument.h +++ b/src/include/executor/instrument.h @@ -38,7 +38,7 @@ typedef enum InstrumentOption INSTRUMENT_TIMER = 1 << 0, /* needs timer (and row counts) */ INSTRUMENT_BUFFERS = 1 << 1, /* needs buffer usage */ INSTRUMENT_ROWS = 1 << 2, /* needs row count */ - INSTRUMENT_ALL = INT32_MAX + INSTRUMENT_ALL = PG_INT32_MAX } InstrumentOption; typedef struct Instrumentation diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 2893ceff18..0e257ac46c 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -587,7 +587,7 @@ typedef enum TableLikeOption CREATE_TABLE_LIKE_INDEXES = 1 << 2, CREATE_TABLE_LIKE_STORAGE = 1 << 3, CREATE_TABLE_LIKE_COMMENTS = 1 << 4, - CREATE_TABLE_LIKE_ALL = INT32_MAX + CREATE_TABLE_LIKE_ALL = PG_INT32_MAX } TableLikeOption; /* diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index d3e9888b7b..e278fa07d3 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -48,7 +48,7 @@ /* * Set the upper and lower bounds of sequence values. */ -#define SEQ_MAXVALUE INT64_MAX +#define SEQ_MAXVALUE PG_INT64_MAX #define SEQ_MINVALUE (-SEQ_MAXVALUE) /* @@ -185,7 +185,7 @@ * the older rand() function, which is often different from --- and * considerably inferior to --- random(). */ -#define MAX_RANDOM_VALUE INT32_MAX +#define MAX_RANDOM_VALUE PG_INT32_MAX /* * On PPC machines, decide whether to use the mutex hint bit in LWARX diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h index 99173644a4..e90d664d5a 100644 --- a/src/include/port/atomics.h +++ b/src/include/port/atomics.h @@ -489,7 +489,7 @@ STATIC_IF_INLINE uint64 pg_atomic_fetch_sub_u64(volatile pg_atomic_uint64 *ptr, int64 sub_) { AssertPointerAlignment(ptr, 8); - Assert(sub_ != INT64_MIN); + Assert(sub_ != PG_INT64_MIN); return pg_atomic_fetch_sub_u64_impl(ptr, sub_); } @@ -518,7 +518,7 @@ STATIC_IF_INLINE uint64 pg_atomic_sub_fetch_u64(volatile pg_atomic_uint64 *ptr, int64 sub_) { AssertPointerAlignment(ptr, 8); - Assert(sub_ != INT64_MIN); + Assert(sub_ != PG_INT64_MIN); return pg_atomic_sub_fetch_u64_impl(ptr, sub_); } diff --git a/src/include/storage/predicate_internals.h b/src/include/storage/predicate_internals.h index 8ecf923b1f..de1fc561a4 100644 --- a/src/include/storage/predicate_internals.h +++ b/src/include/storage/predicate_internals.h @@ -33,7 +33,7 @@ typedef uint64 SerCommitSeqNo; * at that point. It's earlier than all normal sequence numbers, * and is only used by recovered prepared transactions */ -#define InvalidSerCommitSeqNo ((SerCommitSeqNo) UINT64_MAX) +#define InvalidSerCommitSeqNo ((SerCommitSeqNo) PG_UINT64_MAX) #define RecoverySerCommitSeqNo ((SerCommitSeqNo) 1) #define FirstNormalSerCommitSeqNo ((SerCommitSeqNo) 2) diff --git a/src/include/utils/date.h b/src/include/utils/date.h index f07011c385..c076fb846a 100644 --- a/src/include/utils/date.h +++ b/src/include/utils/date.h @@ -36,8 +36,8 @@ typedef struct /* * Infinity and minus infinity must be the max and min values of DateADT. */ -#define DATEVAL_NOBEGIN ((DateADT) INT32_MIN) -#define DATEVAL_NOEND ((DateADT) INT32_MAX) +#define DATEVAL_NOBEGIN ((DateADT) PG_INT32_MIN) +#define DATEVAL_NOEND ((DateADT) PG_INT32_MAX) #define DATE_NOBEGIN(j) ((j) = DATEVAL_NOBEGIN) #define DATE_IS_NOBEGIN(j) ((j) == DATEVAL_NOBEGIN)