From e4ced93b2c35db91cb28f564103a7238efd72b43 Mon Sep 17 00:00:00 2001
From: David Rowley <dgrowley@gmail.com>
Date: Thu, 17 Jul 2025 15:49:03 +1200
Subject: [PATCH v1] Detect elog(ERROR) can't return in MSVC when using C11

---
 src/backend/backup/basebackup_target.c |  2 +-
 src/include/utils/elog.h               | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/backend/backup/basebackup_target.c b/src/backend/backup/basebackup_target.c
index 84b1309d3bd..0b48521f104 100644
--- a/src/backend/backup/basebackup_target.c
+++ b/src/backend/backup/basebackup_target.c
@@ -146,7 +146,7 @@ BaseBackupGetTargetHandle(char *target, char *target_detail)
 			 errmsg("unrecognized target: \"%s\"", target)));
 
 	/* keep compiler quiet */
-	return NULL;
+	//return NULL;
 }
 
 /*
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 675f4f5f469..c93ba82ecf8 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -137,7 +137,21 @@ struct Node;
  * prevents gcc from making the unreachability deduction at optlevel -O0.
  *----------
  */
-#ifdef HAVE__BUILTIN_CONSTANT_P
+
+#if defined(_MSC_VER) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112
+#define pg_builtin_constant(x) \
+	_Generic((1 ? ((void*)((x)*(uintptr_t)0)) : &(int){1}), int*: 1, void*: 0)
+#define ereport_domain(elevel, domain, ...)	\
+	do { \
+		pg_prevent_errno_in_scope(); \
+		if (pg_builtin_constant(elevel) && (elevel) >= ERROR ? \
+			errstart_cold(elevel, domain) : \
+			errstart(elevel, domain)) \
+			__VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \
+		if (pg_builtin_constant(elevel) && (elevel) >= ERROR) \
+			pg_unreachable(); \
+	} while(0)
+#elif defined(HAVE__BUILTIN_CONSTANT_P)
 #define ereport_domain(elevel, domain, ...)	\
 	do { \
 		pg_prevent_errno_in_scope(); \
-- 
2.40.1.windows.1

