From a8621383ed770963d4a6c461753f8c4d0533a193 Mon Sep 17 00:00:00 2001
From: roman khapov <r.khapov@ya.ru>
Date: Tue, 18 Nov 2025 18:15:24 +0500
Subject: [PATCH] use _LAST in enums to define NUM macross

Inspired by 10b7218.

Add *_LAST enums that mark the last valid value,
to be used in *_NUM macros calculating enum size.

This helps avoid mistakes in NUM maceoss when adding
new values in enums.

Note: this will not lead to additional compiler warnings
because _LAST is always equals to some other value of enum.

Signed-off-by: roman khapov <r.khapov@ya.ru>
---
 contrib/pg_stat_statements/pg_stat_statements.c | 4 +++-
 src/backend/postmaster/autovacuum.c             | 4 +++-
 src/bin/pg_dump/pg_backup.h                     | 4 +++-
 src/include/miscadmin.h                         | 4 +++-
 src/include/storage/pmsignal.h                  | 4 +++-
 src/include/storage/procsignal.h                | 1 +
 6 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c
index 39208f80b5b..2cc6e51b964 100644
--- a/contrib/pg_stat_statements/pg_stat_statements.c
+++ b/contrib/pg_stat_statements/pg_stat_statements.c
@@ -129,9 +129,11 @@ typedef enum pgssStoreKind
 	 */
 	PGSS_PLAN = 0,
 	PGSS_EXEC,
+
+	PGSS_LAST = PGSS_EXEC,
 } pgssStoreKind;
 
-#define PGSS_NUMKIND (PGSS_EXEC + 1)
+#define PGSS_NUMKIND (PGSS_LAST + 1)
 
 /*
  * Hashtable key that defines the identity of a hashtable entry.  We separate
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 1c38488f2cb..47f7ea68367 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -250,9 +250,11 @@ typedef enum
 {
 	AutoVacForkFailed,			/* failed trying to start a worker */
 	AutoVacRebalance,			/* rebalance the cost limits */
+
+	AutoVacLast = AutoVacRebalance,
 }			AutoVacuumSignal;
 
-#define AutoVacNumSignals (AutoVacRebalance + 1)
+#define AutoVacNumSignals (AutoVacLast + 1)
 
 /*
  * Autovacuum workitem array, stored in AutoVacuumShmem->av_workItems.  This
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index d9041dad720..299960b8fb8 100644
--- a/src/bin/pg_dump/pg_backup.h
+++ b/src/bin/pg_dump/pg_backup.h
@@ -75,9 +75,11 @@ enum _dumpPreparedQueries
 	PREPQUERY_GETATTRIBUTESTATS,
 	PREPQUERY_GETCOLUMNACLS,
 	PREPQUERY_GETDOMAINCONSTRAINTS,
+
+	PREPQUERY_LAST = PREPQUERY_GETDOMAINCONSTRAINTS,
 };
 
-#define NUM_PREP_QUERIES (PREPQUERY_GETDOMAINCONSTRAINTS + 1)
+#define NUM_PREP_QUERIES (PREPQUERY_LAST + 1)
 
 /* Parameters needed by ConnectDatabase; same for dump and restore */
 typedef struct _connParams
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 9a7d733ddef..cbcfda4e791 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -372,9 +372,11 @@ typedef enum BackendType
 	 * entry.
 	 */
 	B_LOGGER,
+
+	B_LAST = B_LOGGER,
 } BackendType;
 
-#define BACKEND_NUM_TYPES (B_LOGGER + 1)
+#define BACKEND_NUM_TYPES (B_LAST + 1)
 
 extern PGDLLIMPORT BackendType MyBackendType;
 
diff --git a/src/include/storage/pmsignal.h b/src/include/storage/pmsignal.h
index 428aa3fd68a..0b0fca85fdf 100644
--- a/src/include/storage/pmsignal.h
+++ b/src/include/storage/pmsignal.h
@@ -42,9 +42,11 @@ typedef enum
 	PMSIGNAL_START_WALRECEIVER, /* start a walreceiver */
 	PMSIGNAL_ADVANCE_STATE_MACHINE, /* advance postmaster's state machine */
 	PMSIGNAL_XLOG_IS_SHUTDOWN,	/* ShutdownXLOG() completed */
+
+	PGSIGNAL_XLOG_LAST = PMSIGNAL_XLOG_IS_SHUTDOWN,
 } PMSignalReason;
 
-#define NUM_PMSIGNALS (PMSIGNAL_XLOG_IS_SHUTDOWN+1)
+#define NUM_PMSIGNALS (PGSIGNAL_XLOG_LAST+1)
 
 /*
  * Reasons why the postmaster would send SIGQUIT to its children.
diff --git a/src/include/storage/procsignal.h b/src/include/storage/procsignal.h
index afeeb1ca019..d0f925b986b 100644
--- a/src/include/storage/procsignal.h
+++ b/src/include/storage/procsignal.h
@@ -46,6 +46,7 @@ typedef enum
 	PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT,
 	PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
 	PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
+
 	PROCSIG_RECOVERY_CONFLICT_LAST = PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
 } ProcSignalReason;
 
-- 
2.50.1 (Apple Git-155)

