From 623b8090c34d387e6ddfe4c61fd561e666b194a5 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 28 Oct 2025 23:22:08 +0100 Subject: [PATCH 2/2] Fix "inconsistent DLL linkage" warning on Windows MSVC This warning was disabled in meson.build (warning 4273). If you enable it, it looks like this: ../src/backend/utils/misc/ps_status.c(27): warning C4273: '__p__environ': inconsistent dll linkage C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\stdlib.h(1158): note: see previous definition of '__p__environ' The declaration in ps_status.c was: #if !defined(WIN32) || defined(_MSC_VER) extern char **environ; #endif The declaration in the OS header file is: _DCRTIMP char*** __cdecl __p__environ (void); #define _environ (*__p__environ()) So it is evident that this could be problematic. To fix, disable the re-declaration in ps_status.c, and also in some other places that use the same code pattern but didn't trigger the warning. XXX Obviously, the old code indicates that someone once thought this declaration was necessary under _MSC_VER. Maybe that is obsolete, or maybe we need some further conditionals. Then we can also re-enable the warning (delete the disablement in meson.build). ci-os-only: windows --- meson.build | 1 - src/backend/postmaster/postmaster.c | 2 +- src/backend/utils/misc/ps_status.c | 2 +- src/test/regress/regress.c | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/meson.build b/meson.build index 5ba7f2c8a24..520872a6550 100644 --- a/meson.build +++ b/meson.build @@ -2150,7 +2150,6 @@ if cc.get_id() == 'msvc' # Warnings to disable: # from /W1: '/wd4090', # different 'modifier' qualifiers - '/wd4273', # inconsistent DLL linkage # from /W2: '/wd4244', # conversion from 'type1' to 'type2', possible loss of data # from /W3: diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 00de559ba8f..7c064cf9fbb 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -880,7 +880,7 @@ PostmasterMain(int argc, char *argv[]) /* For debugging: display postmaster environment */ if (message_level_is_interesting(DEBUG3)) { -#if !defined(WIN32) || defined(_MSC_VER) +#if !defined(WIN32) extern char **environ; #endif char **p; diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c index 4df25944deb..8709c4f5125 100644 --- a/src/backend/utils/misc/ps_status.c +++ b/src/backend/utils/misc/ps_status.c @@ -23,7 +23,7 @@ #include "utils/guc.h" #include "utils/ps_status.h" -#if !defined(WIN32) || defined(_MSC_VER) +#if !defined(WIN32) extern char **environ; #endif diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 465ac148ac9..a2db6080876 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -432,7 +432,7 @@ PG_FUNCTION_INFO_V1(get_environ); Datum get_environ(PG_FUNCTION_ARGS) { -#if !defined(WIN32) || defined(_MSC_VER) +#if !defined(WIN32) extern char **environ; #endif int nvals = 0; -- 2.51.0