Hi, In one of my compilations of Postgres, I noted this warning from gcc.
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 -I../../../../src/include -D_GNU_SOURCE -c -o sync.o sync.c sync.c: In function ‘RememberSyncRequest’: sync.c:528:10: warning: assignment to ‘PendingFsyncEntry *’ {aka ‘struct <anonymous> *’} from incompatible pointer type ‘PendingUnlinkEntry *’ {aka ‘struct <anonymous> *’} [-Wincompatible-pointer-types] 528 | entry = (PendingUnlinkEntry *) lfirst(cell); Although the structures are identical, gcc bothers to assign a pointer from one to the other. typedef struct { FileTag tag; /* identifies handler and file */ CycleCtr cycle_ctr; /* sync_cycle_ctr of oldest request */ bool canceled; /* canceled is true if we canceled "recently" */ } PendingFsyncEntry; typedef struct { FileTag tag; /* identifies handler and file */ CycleCtr cycle_ctr; /* checkpoint_cycle_ctr when request was made */ bool canceled; /* true if request has been canceled */ } PendingUnlinkEntry; The patch tries to fix this. regards, Ranier Vilela
diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c index 59210a451d..b5071663c3 100644 --- a/src/backend/storage/sync/sync.c +++ b/src/backend/storage/sync/sync.c @@ -525,7 +525,7 @@ RememberSyncRequest(const FileTag *ftag, SyncRequestType type) /* Cancel matching unlink requests */ foreach(cell, pendingUnlinks) { - entry = (PendingUnlinkEntry *) lfirst(cell); + PendingUnlinkEntry * entry = (PendingUnlinkEntry *) lfirst(cell); if (entry->tag.handler == ftag->handler && syncsw[ftag->handler].sync_filetagmatches(ftag, &entry->tag))