diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c
index 7647271c48be45842a8ffbf2665440709626fc6e..4549d11e2023791ab445fea7d2c8400371202a78 100644
--- a/src/bin/pg_dump/parallel.c
+++ b/src/bin/pg_dump/parallel.c
@@ -137,8 +137,18 @@ static volatile DumpSignalInformation signal_info;
 static CRITICAL_SECTION signal_info_lock;
 #endif
 
-/* Used from signal handlers, no buffering */
-#define write_stderr(str)	write(fileno(stderr), str, strlen(str))
+/*
+ * Write a simple string to stderr --- must be safe in a signal handler.
+ * We ignore the write() result since there's not much we could do about it.
+ * Certain compilers make that harder than it ought to be.
+ */
+#define write_stderr(str) \
+	do { \
+		const char *str_ = (str); \
+		int		rc_; \
+		rc_ = write(fileno(stderr), str_, strlen(str_)); \
+		(void) rc_; \
+	} while (0)
 
 
 #ifdef WIN32
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index b8bdcc751a201dc04e8dc0c6cff9fef3d257453a..2450b9c3f83cac0ee4248d9f1732057850547951 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -235,8 +235,18 @@ static PGcancel *volatile cancelConn = NULL;
 static CRITICAL_SECTION cancelConnLock;
 #endif
 
-/* Used from signal handlers, no buffering */
-#define write_stderr(str)	write(fileno(stderr), str, strlen(str))
+/*
+ * Write a simple string to stderr --- must be safe in a signal handler.
+ * We ignore the write() result since there's not much we could do about it.
+ * Certain compilers make that harder than it ought to be.
+ */
+#define write_stderr(str) \
+	do { \
+		const char *str_ = (str); \
+		int		rc_; \
+		rc_ = write(fileno(stderr), str_, strlen(str_)); \
+		(void) rc_; \
+	} while (0)
 
 
 #ifndef WIN32
@@ -245,7 +255,6 @@ static void
 handle_sigint(SIGNAL_ARGS)
 {
 	int			save_errno = errno;
-	int			rc;
 	char		errbuf[256];
 
 	/* if we are waiting for input, longjmp out of it */
@@ -262,16 +271,11 @@ handle_sigint(SIGNAL_ARGS)
 	if (cancelConn != NULL)
 	{
 		if (PQcancel(cancelConn, errbuf, sizeof(errbuf)))
-		{
-			rc = write_stderr("Cancel request sent\n");
-			(void) rc;			/* ignore errors, nothing we can do here */
-		}
+			write_stderr("Cancel request sent\n");
 		else
 		{
-			rc = write_stderr("Could not send cancel request: ");
-			(void) rc;			/* ignore errors, nothing we can do here */
-			rc = write_stderr(errbuf);
-			(void) rc;			/* ignore errors, nothing we can do here */
+			write_stderr("Could not send cancel request: ");
+			write_stderr(errbuf);
 		}
 	}