* etc. are compatible.
*
* If the above statement isn't true on some bizarre platform, we're
- * a bit hosed (see StaticAssertStmt in hstoreValidOldFormat).
+ * a bit hosed.
*/
typedef struct
{
pos:31;
} HOldEntry;
+StaticAssertDecl(sizeof(HOldEntry) == 2 * sizeof(HEntry),
+ "old hstore format is not upward-compatible");
+
static int hstoreValidNewFormat(HStore *hs);
static int hstoreValidOldFormat(HStore *hs);
if (hs->size_ & HS_FLAG_NEWVERSION)
return 0;
- /* New format uses an HEntry for key and another for value */
- StaticAssertStmt(sizeof(HOldEntry) == 2 * sizeof(HEntry),
- "old hstore format is not upward-compatible");
-
if (count == 0)
return 2;
static BlockNumber
count_nondeletable_pages(LVRelState *vacrel, bool *lock_waiter_detected)
{
+ StaticAssertDecl((PREFETCH_SIZE & (PREFETCH_SIZE - 1)) == 0,
+ "prefetch size must be power of 2");
+
BlockNumber blkno;
BlockNumber prefetchedUntil;
instr_time starttime;
* in forward direction, so that OS-level readahead can kick in.
*/
blkno = vacrel->rel_pages;
- StaticAssertStmt((PREFETCH_SIZE & (PREFETCH_SIZE - 1)) == 0,
- "prefetch size must be power of 2");
prefetchedUntil = InvalidBlockNumber;
while (blkno > vacrel->nonempty_pages)
{
BlockNumber startblock,
BlockNumber numblocks)
{
+ StaticAssertDecl(MaxBlockNumber <= 0xFFFFFFFE,
+ "pg_nextpower2_32 may be too small for non-standard BlockNumber width");
+
BlockNumber sync_startpage = InvalidBlockNumber;
BlockNumber scan_nblocks;
/* Reset the state we use for controlling allocation size. */
memset(pbscanwork, 0, sizeof(*pbscanwork));
- StaticAssertStmt(MaxBlockNumber <= 0xFFFFFFFE,
- "pg_nextpower2_32 may be too small for non-standard BlockNumber width");
-
retry:
/* Grab the spinlock. */
SpinLockAcquire(&pbscan->phs_mutex);
if (pcxt->nworkers > 0)
{
+ StaticAssertDecl(BUFFERALIGN(PARALLEL_ERROR_QUEUE_SIZE) ==
+ PARALLEL_ERROR_QUEUE_SIZE,
+ "parallel error queue size not buffer-aligned");
+
/* Estimate space for various kinds of state sharing. */
library_len = EstimateLibraryStateSpace();
shm_toc_estimate_chunk(&pcxt->estimator, library_len);
shm_toc_estimate_keys(&pcxt->estimator, 12);
/* Estimate space need for error queues. */
- StaticAssertStmt(BUFFERALIGN(PARALLEL_ERROR_QUEUE_SIZE) ==
- PARALLEL_ERROR_QUEUE_SIZE,
- "parallel error queue size not buffer-aligned");
shm_toc_estimate_chunk(&pcxt->estimator,
mul_size(PARALLEL_ERROR_QUEUE_SIZE,
pcxt->nworkers));
error_count > 0 ? error_count : zeroed_count;
uint8 first_off;
- StaticAssertStmt(PG_IOV_MAX <= 1 << READV_COUNT_BITS,
+ StaticAssertDecl(PG_IOV_MAX <= 1 << READV_COUNT_BITS,
"PG_IOV_MAX is bigger than reserved space for error data");
- StaticAssertStmt((1 + 1 + 3 * READV_COUNT_BITS) <= PGAIO_RESULT_ERROR_BITS,
+ StaticAssertDecl((1 + 1 + 3 * READV_COUNT_BITS) <= PGAIO_RESULT_ERROR_BITS,
"PGAIO_RESULT_ERROR_BITS is insufficient for buffer_readv");
/*
tryAgain:
#ifdef PG_O_DIRECT_USE_F_NOCACHE
-
- /*
- * The value we defined to stand in for O_DIRECT when simulating it with
- * F_NOCACHE had better not collide with any of the standard flags.
- */
- StaticAssertStmt((PG_O_DIRECT &
- (O_APPEND |
- O_CLOEXEC |
- O_CREAT |
- O_DSYNC |
- O_EXCL |
- O_RDWR |
- O_RDONLY |
- O_SYNC |
- O_TRUNC |
- O_WRONLY)) == 0,
- "PG_O_DIRECT value collides with standard flag");
fd = open(fileName, fileFlags & ~PG_O_DIRECT, fileMode);
#else
fd = open(fileName, fileFlags, fileMode);
* pending signals are serviced.
*/
set->handles[0] = pgwin32_signal_event;
- StaticAssertStmt(WSA_INVALID_EVENT == NULL, "");
#endif
return set;
#endif
#if defined(WAIT_USE_WIN32)
+StaticAssertDecl(WSA_INVALID_EVENT == NULL, "");
+
static void
WaitEventAdjustWin32(WaitEventSet *set, WaitEvent *event)
{
* There will be two bytes of zero padding on the end of the least
* significant bits.
*/
- StaticAssertStmt(sizeof(res) >= sizeof(macaddr),
+ StaticAssertDecl(sizeof(res) >= sizeof(macaddr),
"Datum is too small for macaddr");
memset(&res, 0, sizeof(res));
memcpy(&res, authoritative, sizeof(macaddr));
SharedInvalidationMessage msg;
/* verify optimization stated above stays valid */
- StaticAssertStmt(MAX_BACKENDS_BITS <= 23,
+ StaticAssertDecl(MAX_BACKENDS_BITS <= 23,
"MAX_BACKENDS_BITS is too big for inval.c");
msg.sm.id = SHAREDINVALSMGR_ID;
#elif defined(F_NOCACHE)
#define PG_O_DIRECT 0x80000000
#define PG_O_DIRECT_USE_F_NOCACHE
+/*
+ * The value we defined to stand in for O_DIRECT when simulating it with
+ * F_NOCACHE had better not collide with any of the standard flags.
+ */
+StaticAssertDecl((PG_O_DIRECT &
+ (O_APPEND |
+ O_CLOEXEC |
+ O_CREAT |
+ O_DSYNC |
+ O_EXCL |
+ O_RDWR |
+ O_RDONLY |
+ O_SYNC |
+ O_TRUNC |
+ O_WRONLY)) == 0,
+ "PG_O_DIRECT value collides with standard flag");
#else
#define PG_O_DIRECT 0
#endif