Replace most StaticAssertStmt() with StaticAssertDecl()
authorPeter Eisentraut <[email protected]>
Fri, 12 Dec 2025 07:58:34 +0000 (08:58 +0100)
committerPeter Eisentraut <[email protected]>
Fri, 12 Dec 2025 09:06:40 +0000 (10:06 +0100)
Similar to commit 75f49221c22, it is preferable to use
StaticAssertDecl() instead of StaticAssertStmt() when possible.

Discussion: https://www.postgresql.org/message-id/flat/CA%2BhUKGKvr0x_oGmQTUkx%3DODgSksT2EtgCA6LmGx_jQFG%3DsDUpg%40mail.gmail.com

contrib/hstore/hstore_compat.c
src/backend/access/heap/vacuumlazy.c
src/backend/access/table/tableam.c
src/backend/access/transam/parallel.c
src/backend/storage/buffer/bufmgr.c
src/backend/storage/file/fd.c
src/backend/storage/ipc/waiteventset.c
src/backend/utils/adt/mac.c
src/backend/utils/cache/inval.c
src/include/storage/fd.h

index d75e9cb23f5cdc4801fe777d0d52c53d16b87c11..3a9f7f45cb71ce9562f9b990de889f567d57f17d 100644 (file)
@@ -94,7 +94,7 @@
  * 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
 {
@@ -105,6 +105,9 @@ 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);
 
@@ -179,10 +182,6 @@ 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;
 
index e8c99c3773dc2b98692ba676500545d5531e5be7..62035b7f9c3e86f7e1fe8d4f98d3d42995f0388b 100644 (file)
@@ -3388,6 +3388,9 @@ lazy_truncate_heap(LVRelState *vacrel)
 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;
@@ -3402,8 +3405,6 @@ count_nondeletable_pages(LVRelState *vacrel, bool *lock_waiter_detected)
     * 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)
    {
index 1e099febdc8cacf34d60264dbe1c3e60eff895a2..73ebc01a08fb3cf7ec599bc5ea8952b4ccec5d8c 100644 (file)
@@ -462,15 +462,15 @@ table_block_parallelscan_startblock_init(Relation rel,
                                         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);
index 8428103eba41f6cc6b385bfed56d25fee0b9aa65..956b23816dea6beb34f7efd0564eec8f7876fe67 100644 (file)
@@ -266,6 +266,10 @@ InitializeParallelDSM(ParallelContext *pcxt)
 
    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);
@@ -297,9 +301,6 @@ InitializeParallelDSM(ParallelContext *pcxt)
        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));
index e78912cd141aeb785b46c8520f1eada9f517f8ec..c3e72fb1b967dc092934b418e205a7b3c8fd1c5d 100644 (file)
@@ -7149,9 +7149,9 @@ buffer_readv_encode_error(PgAioResult *result,
        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");
 
    /*
index 716fd7749b65da70b81cf6880d952a1cff615e30..9670e809b724c0fcd19c21aba2fe2c8cad649ceb 100644 (file)
@@ -1111,23 +1111,6 @@ BasicOpenFilePerm(const char *fileName, int fileFlags, mode_t fileMode)
 
 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);
index b5431ad3c5c3d71b76d886ee88fd8c860a87c240..f2174e72ae68e389951d328ca0ec36034cfcc234 100644 (file)
@@ -462,7 +462,6 @@ CreateWaitEventSet(ResourceOwner resowner, int nevents)
     * pending signals are serviced.
     */
    set->handles[0] = pgwin32_signal_event;
-   StaticAssertStmt(WSA_INVALID_EVENT == NULL, "");
 #endif
 
    return set;
@@ -979,6 +978,8 @@ WaitEventAdjustKqueue(WaitEventSet *set, WaitEvent *event, int old_events)
 #endif
 
 #if defined(WAIT_USE_WIN32)
+StaticAssertDecl(WSA_INVALID_EVENT == NULL, "");
+
 static void
 WaitEventAdjustWin32(WaitEventSet *set, WaitEvent *event)
 {
index 35234e700ffe64a748424c9d8d9a9f4c449d11d7..bb12ed758cb1108cd1f78e51e77da539cdeffc75 100644 (file)
@@ -485,7 +485,7 @@ macaddr_abbrev_convert(Datum original, SortSupport ssup)
     * 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));
index 868f8f6188f7001e82a3ef7977382266a0e77103..9d16ca10ae129e51993950995a3342f28fac83d7 100644 (file)
@@ -1753,7 +1753,7 @@ CacheInvalidateSmgr(RelFileLocatorBackend rlocator)
    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;
index a1bdefec4a59b318a13d189b74fc426b9fa72b8e..a8b0c9b3997ef284ec689bbda785ec468bbae707 100644 (file)
@@ -92,6 +92,22 @@ extern PGDLLIMPORT int max_safe_fds;
 #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