Since lapwing no longer runs with -Werror, and might be gone completely soon, we no longer need the various workarounds gathered over time to avoid compiler warnings there. The attached patch reverts various patches and makes similar adjustments to some newer code.
From 35c8adb8ba0aefe3a8ad375196da510f5a2a72bd Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Fri, 7 Mar 2025 07:36:41 +0100
Subject: [PATCH] Revert workarounds for -Wmissing-braces false positives on
 old GCC

We have collected several instances of a workaround for GCC bug 53119,
which caused false-positive compiler warnings. This bug has long been
fixed, but was still seen on the buildfarm, most recently on lapwing
with gcc (Debian 4.7.2-5).

That compiler no longer runs warning-free since commit 6fdd5d95634, so
we don't need to keep these workarounds.  And furthermore, the
consensus appears to be that we don't want to keep supporting that era
of platform anymore at all.

This reverts the following commits:

d937904cce6a3d82e4f9c2127de7b59105a134b3
506428d091760650971433f6bc083531c307b368
b449afb582bb9015bfbb85abc10ce122aef9ec70
6392f2a0968c20ecde4d27b6652703ad931fce92
bad0763a4d7be3005eae35d460c73ac4bc7ebaad
5e0c761d0a13c7b4f7c5de618ac38560d74d74d0

and makes a few similar fixes to newer code.
---
 contrib/pg_prewarm/autoprewarm.c          |  6 ++----
 contrib/postgres_fdw/postgres_fdw.c       |  3 +--
 src/backend/optimizer/path/costsize.c     |  3 +--
 src/backend/storage/smgr/bulk_write.c     |  2 +-
 src/bin/pg_waldump/rmgrdesc.c             |  4 ++--
 src/bin/pgbench/pgbench.c                 |  7 +------
 src/common/blkreftable.c                  | 12 ++++++------
 src/common/file_utils.c                   |  2 +-
 src/interfaces/libpq/fe-auth-oauth-curl.c |  2 +-
 9 files changed, 16 insertions(+), 25 deletions(-)

diff --git a/contrib/pg_prewarm/autoprewarm.c b/contrib/pg_prewarm/autoprewarm.c
index b45755b3347..73485a2323c 100644
--- a/contrib/pg_prewarm/autoprewarm.c
+++ b/contrib/pg_prewarm/autoprewarm.c
@@ -798,12 +798,11 @@ apw_detach_shmem(int code, Datum arg)
 static void
 apw_start_leader_worker(void)
 {
-       BackgroundWorker worker;
+       BackgroundWorker worker = {0};
        BackgroundWorkerHandle *handle;
        BgwHandleStatus status;
        pid_t           pid;
 
-       MemSet(&worker, 0, sizeof(BackgroundWorker));
        worker.bgw_flags = BGWORKER_SHMEM_ACCESS;
        worker.bgw_start_time = BgWorkerStart_ConsistentState;
        strcpy(worker.bgw_library_name, "pg_prewarm");
@@ -840,10 +839,9 @@ apw_start_leader_worker(void)
 static void
 apw_start_database_worker(void)
 {
-       BackgroundWorker worker;
+       BackgroundWorker worker = {0};
        BackgroundWorkerHandle *handle;
 
-       MemSet(&worker, 0, sizeof(BackgroundWorker));
        worker.bgw_flags =
                BGWORKER_SHMEM_ACCESS | BGWORKER_BACKEND_DATABASE_CONNECTION;
        worker.bgw_start_time = BgWorkerStart_ConsistentState;
diff --git a/contrib/postgres_fdw/postgres_fdw.c 
b/contrib/postgres_fdw/postgres_fdw.c
index 1131a8bf77e..c941b1a2f9d 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -3333,7 +3333,7 @@ estimate_path_cost_size(PlannerInfo *root,
                {
                        RelOptInfo *outerrel = fpinfo->outerrel;
                        PgFdwRelationInfo *ofpinfo;
-                       AggClauseCosts aggcosts;
+                       AggClauseCosts aggcosts = {0};
                        double          input_rows;
                        int                     numGroupCols;
                        double          numGroups = 1;
@@ -3357,7 +3357,6 @@ estimate_path_cost_size(PlannerInfo *root,
                        input_rows = ofpinfo->rows;
 
                        /* Collect statistics about aggregates for estimating 
costs. */
-                       MemSet(&aggcosts, 0, sizeof(AggClauseCosts));
                        if (root->parse->hasAggs)
                        {
                                get_agg_clause_costs(root, AGGSPLIT_SIMPLE, 
&aggcosts);
diff --git a/src/backend/optimizer/path/costsize.c 
b/src/backend/optimizer/path/costsize.c
index 73d78617009..97d6759d8c2 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -2690,13 +2690,12 @@ cost_agg(Path *path, PlannerInfo *root,
        double          output_tuples;
        Cost            startup_cost;
        Cost            total_cost;
-       AggClauseCosts dummy_aggcosts;
+       const AggClauseCosts dummy_aggcosts = {0};
 
        /* Use all-zero per-aggregate costs if NULL is passed */
        if (aggcosts == NULL)
        {
                Assert(aggstrategy == AGG_HASHED);
-               MemSet(&dummy_aggcosts, 0, sizeof(AggClauseCosts));
                aggcosts = &dummy_aggcosts;
        }
 
diff --git a/src/backend/storage/smgr/bulk_write.c 
b/src/backend/storage/smgr/bulk_write.c
index ecd441f1be2..b958be15716 100644
--- a/src/backend/storage/smgr/bulk_write.c
+++ b/src/backend/storage/smgr/bulk_write.c
@@ -46,7 +46,7 @@
 
 #define MAX_PENDING_WRITES XLR_MAX_BLOCK_ID
 
-static const PGIOAlignedBlock zero_buffer = {{0}};     /* worth BLCKSZ */
+static const PGIOAlignedBlock zero_buffer = {0};       /* worth BLCKSZ */
 
 typedef struct PendingWrite
 {
diff --git a/src/bin/pg_waldump/rmgrdesc.c b/src/bin/pg_waldump/rmgrdesc.c
index 6b8c17bb4c4..fac509ed134 100644
--- a/src/bin/pg_waldump/rmgrdesc.c
+++ b/src/bin/pg_waldump/rmgrdesc.c
@@ -41,8 +41,8 @@ static const RmgrDescData RmgrDescTable[RM_N_BUILTIN_IDS] = {
 
 #define CUSTOM_NUMERIC_NAME_LEN sizeof("custom###")
 
-static char CustomNumericNames[RM_N_CUSTOM_IDS][CUSTOM_NUMERIC_NAME_LEN] = 
{{0}};
-static RmgrDescData CustomRmgrDesc[RM_N_CUSTOM_IDS] = {{0}};
+static char CustomNumericNames[RM_N_CUSTOM_IDS][CUSTOM_NUMERIC_NAME_LEN] = {0};
+static RmgrDescData CustomRmgrDesc[RM_N_CUSTOM_IDS] = {0};
 static bool CustomRmgrDescInitialized = false;
 
 /*
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index bf099aab278..c17c728ebb4 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -2279,15 +2279,10 @@ evalStandardFunc(CState *st,
 {
        /* evaluate all function arguments */
        int                     nargs = 0;
+       PgBenchValue vargs[MAX_FARGS] = {0};
        PgBenchExprLink *l = args;
        bool            has_null = false;
 
-       /*
-        * This value is double braced to workaround GCC bug 53119, which seems 
to
-        * exist at least on gcc (Debian 4.7.2-5) 4.7.2, 32-bit.
-        */
-       PgBenchValue vargs[MAX_FARGS] = {{0}};
-
        for (nargs = 0; nargs < MAX_FARGS && l != NULL; nargs++, l = l->next)
        {
                if (!evaluateExpr(st, l->expr, &vargs[nargs]))
diff --git a/src/common/blkreftable.c b/src/common/blkreftable.c
index 6d9c1dfddbc..b935baf9ad4 100644
--- a/src/common/blkreftable.c
+++ b/src/common/blkreftable.c
@@ -265,7 +265,7 @@ BlockRefTableSetLimitBlock(BlockRefTable *brtab,
                                                   BlockNumber limit_block)
 {
        BlockRefTableEntry *brtentry;
-       BlockRefTableKey key = {{0}};   /* make sure any padding is zero */
+       BlockRefTableKey key = {0}; /* make sure any padding is zero */
        bool            found;
 
        memcpy(&key.rlocator, rlocator, sizeof(RelFileLocator));
@@ -300,7 +300,7 @@ BlockRefTableMarkBlockModified(BlockRefTable *brtab,
                                                           BlockNumber blknum)
 {
        BlockRefTableEntry *brtentry;
-       BlockRefTableKey key = {{0}};   /* make sure any padding is zero */
+       BlockRefTableKey key = {0}; /* make sure any padding is zero */
        bool            found;
 #ifndef FRONTEND
        MemoryContext oldcontext = MemoryContextSwitchTo(brtab->mcxt);
@@ -340,7 +340,7 @@ BlockRefTableEntry *
 BlockRefTableGetEntry(BlockRefTable *brtab, const RelFileLocator *rlocator,
                                          ForkNumber forknum, BlockNumber 
*limit_block)
 {
-       BlockRefTableKey key = {{0}};   /* make sure any padding is zero */
+       BlockRefTableKey key = {0}; /* make sure any padding is zero */
        BlockRefTableEntry *entry;
 
        Assert(limit_block != NULL);
@@ -521,7 +521,7 @@ WriteBlockRefTable(BlockRefTable *brtab,
                for (i = 0; i < brtab->hash->members; ++i)
                {
                        BlockRefTableSerializedEntry *sentry = &sdata[i];
-                       BlockRefTableKey key = {{0}};   /* make sure any 
padding is zero */
+                       BlockRefTableKey key = {0}; /* make sure any padding is 
zero */
                        unsigned        j;
 
                        /* Write the serialized entry itself. */
@@ -616,7 +616,7 @@ BlockRefTableReaderNextRelation(BlockRefTableReader *reader,
                                                                BlockNumber 
*limit_block)
 {
        BlockRefTableSerializedEntry sentry;
-       BlockRefTableSerializedEntry zentry = {{0}};
+       BlockRefTableSerializedEntry zentry = {0};
 
        /*
         * Sanity check: caller must read all blocks from all chunks before 
moving
@@ -1291,7 +1291,7 @@ BlockRefTableWrite(BlockRefTableBuffer *buffer, void 
*data, int length)
 static void
 BlockRefTableFileTerminate(BlockRefTableBuffer *buffer)
 {
-       BlockRefTableSerializedEntry zentry = {{0}};
+       BlockRefTableSerializedEntry zentry = {0};
        pg_crc32c       crc;
 
        /* Write a sentinel indicating that there are no more entries. */
diff --git a/src/common/file_utils.c b/src/common/file_utils.c
index 0e3cfede935..eaa2e76f43f 100644
--- a/src/common/file_utils.c
+++ b/src/common/file_utils.c
@@ -687,7 +687,7 @@ pg_pwritev_with_retry(int fd, const struct iovec *iov, int 
iovcnt, off_t offset)
 ssize_t
 pg_pwrite_zeros(int fd, size_t size, off_t offset)
 {
-       static const PGIOAlignedBlock zbuffer = {{0}};  /* worth BLCKSZ */
+       static const PGIOAlignedBlock zbuffer = {0};    /* worth BLCKSZ */
        void       *zerobuf_addr = unconstify(PGIOAlignedBlock *, 
&zbuffer)->data;
        struct iovec iov[PG_IOV_MAX];
        size_t          remaining_size = size;
diff --git a/src/interfaces/libpq/fe-auth-oauth-curl.c 
b/src/interfaces/libpq/fe-auth-oauth-curl.c
index 6e60a81574d..066b8810077 100644
--- a/src/interfaces/libpq/fe-auth-oauth-curl.c
+++ b/src/interfaces/libpq/fe-auth-oauth-curl.c
@@ -1232,7 +1232,7 @@ register_socket(CURL *curl, curl_socket_t socket, int 
what, void *ctx,
 #endif
 #ifdef HAVE_SYS_EVENT_H
        struct async_ctx *actx = ctx;
-       struct kevent ev[2] = {{0}};
+       struct kevent ev[2] = {0};
        struct kevent ev_out[2];
        struct timespec timeout = {0};
        int                     nev = 0;
-- 
2.48.1

Reply via email to