mingw: stop using nedmalloc

The vendored nedmalloc allocator under compat/nedmalloc/ has been unmaintained upstream for a very long time: the original repository at https://github.com/ned14/nedmalloc received its last commit on July 5, 2014, and was archived (made read-only) by its owner on March 15, 2019. Our copy has been carried forward unchanged ever since. The Git for Windows commit that introduced mimalloc as a replacement on Windows ("mingw: use mimalloc", 2019-06-24, present in the Git for Windows branch thicket but not upstream) already observed at that time that nedmalloc had ceased to see any updates for several years. This came to a head when the Git for Windows SDK upgraded to GCC 16: the `add_segment()` function in `compat/nedmalloc/malloc.c.h` declares `int nfences = 0` and only references it inside an `assert()`, which GCC 16 now flags as `-Wunused-but-set-variable`. Combined with the `-Werror` enabled by `DEVELOPER=1`, this turns into a hard build failure: compat/nedmalloc/malloc.c.h: In function 'add_segment': compat/nedmalloc/malloc.c.h:3897:7: error: variable 'nfences' set but not used [-Werror=unused-but-set-variable=] 3897 | int nfences = 0; | ^~~~~~~ cc1.exe: all warnings being treated as errors The same source built without complaint under GCC 15.2.0; the regression was bisected to the SDK package update at https://github.com/git-for-windows/git-sdk-64/commit/188d93dd455 (`mingw-w64-x86_64-gcc 15.2.0-14 -> 16.1.0-1`), with the failing CI run captured at https://github.com/git-for-windows/git-sdk-64/actions/runs/25244795074. Rather than patch the unmaintained vendored sources to silence the warning, stop opting into nedmalloc altogether on Windows. The platform allocator is what every non-MINGW build already uses, and a fresh build of git.git's master against a minimal Git for Windows SDK upgraded to GCC 16 completes successfully. The compat/nedmalloc/ subtree itself is removed by subsequent commits in this series. Assisted-by: Opus 4.7 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed May 8, 2026 at 12:50 UTC c9eb040e4b4154e3a3ef66090131b39f5126312a
3 files changed +1 -6
config.mak.uname
-3
@@ -758,9 +758,6 @@ ifeq ($(uname_S),MINGW)
758 HAVE_LIBCHARSET_H = YesPlease
759 USE_GETTEXT_SCHEME = fallthrough
760 USE_LIBPCRE = YesPlease
761 - ifneq (CLANGARM64,$(MSYSTEM))
762 - USE_NED_ALLOCATOR = YesPlease
763 - endif
761 ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
762 # Move system config into top-level /etc/
763 ETC_GITCONFIG = ../etc/gitconfig
contrib/buildsystems/CMakeLists.txt
+1 -2
@@ -255,7 +255,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
255 add_compile_definitions(HAVE_ALLOCA_H NO_POSIX_GOODIES NATIVE_CRLF NO_UNIX_SOCKETS WIN32
256 _CONSOLE DETECT_MSYS_TTY STRIP_EXTENSION=".exe" NO_SYMLINK_HEAD UNRELIABLE_FSTAT
257 NOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0
258 - USE_NED_ALLOCATOR OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP
258 + OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP
259 HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET HAVE_RTLGENRANDOM)
260 list(APPEND compat_SOURCES
261 compat/mingw.c
@@ -267,7 +267,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
267 compat/win32/syslog.c
268 compat/win32/trace2_win32_process_info.c
269 compat/win32/dirent.c
270 - compat/nedmalloc/nedmalloc.c
270 compat/strdup.c)
271 set(NO_UNIX_SOCKETS 1)
272
meson.build
-1
@@ -1285,7 +1285,6 @@ elif host_machine.system() == 'windows'
1285 'compat/win32/pthread.c',
1286 'compat/win32/syslog.c',
1287 'compat/win32mmap.c',
1288 - 'compat/nedmalloc/nedmalloc.c',
1288 ]
1289
1290 libgit_c_args += [