Skip to content

Clang GNU frontend fails to build dev3 on Windows #1370

Description

@AlifianK

I'm unable to build the latest dev3 branch on Windows using Clang with the GNU frontend (clang), rather than clang-cl.
The build fails in both Debug and Release configurations.

Environment
OS: Windows 11 x64
mimalloc: latest dev3 branch
Compiler: Clang 22.1.8
Clang target: x86_64-pc-windows-msvc
Thread model: posix
CMake + Ninja
C standard: GNU11

Build Log
➜ clang --version
clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
➜ cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang --fresh ..
-- The C compiler identification is Clang 22.1.8 with GNU-like command-line
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Git: C:/Program Files/Git/cmd/git.exe (found version "2.55.0.windows.4")
--
-- Architecture: x64
-- Override standard malloc (MI_OVERRIDE=ON)
-- Set debug level to internal assertion and invariant checking (MI_DEBUG=INTERNAL)
--
-- Library name     : mimalloc-debug
-- Version          : 3.5.0
-- Build type       : debug
-- C Compiler       : C:/Program Files/LLVM/bin/clang.exe
-- Compiler flags   : -Wall;-Wextra;-Wpedantic;-Wno-unknown-pragmas;-fvisibility=hidden;-Wstrict-prototypes;-Wno-static-in-inline;-mno-outline;-ftls-model=initial-exec;-fno-builtin-malloc
-- Compiler defines : MI_GIT_DESCRIBE=v3.5.0;MI_DEBUG=2;MI_CMAKE_BUILD_TYPE=debug
-- Link libraries   : psapi;shell32;user32;advapi32;bcrypt
-- Build targets    : shared;static;object;tests
--
-- Configuring done (2.2s)
-- Generating done (0.3s)
-- Build files have been written to: D:/dev/mimalloc/out
➜ ninja
[1/56] Building C object CMakeFiles/mimalloc.dir/src/alloc-aligned.c.obj
FAILED: [code=1] CMakeFiles/mimalloc.dir/src/alloc-aligned.c.obj
"C:\Program Files\LLVM\bin\clang.exe" -DMI_CMAKE_BUILD_TYPE=debug -DMI_DEBUG=2 -DMI_GIT_DESCRIBE=v3.5.0 -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -ID:/dev/mimalloc/include -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -Wno-static-in-inline -mno-outline -ftls-model=initial-exec -fno-builtin-malloc -MD -MT CMakeFiles/mimalloc.dir/src/alloc-aligned.c.obj -MF CMakeFiles\mimalloc.dir\src\alloc-aligned.c.obj.d -o CMakeFiles/mimalloc.dir/src/alloc-aligned.c.obj -c D:/dev/mimalloc/src/alloc-aligned.c
In file included from D:/dev/mimalloc/src/alloc-aligned.c:9:
D:/dev/mimalloc/include\mimalloc/internal.h:792:33: error: incompatible pointer types passing 'struct mi_page_s **' to parameter of type 'const uintptr_t *' (aka 'const unsigned long long *') [-Wincompatible-pointer-types]
  792 |   return mi_atomic_load_acquire(&page->self);
      |                                 ^~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:75: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                                           ^
D:/dev/mimalloc/include\mimalloc\atomic.h:220:75: note: passing argument to parameter 'p' here
  220 | static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) {
      |                                                                           ^
In file included from D:/dev/mimalloc/src/alloc-aligned.c:9:
D:/dev/mimalloc/include\mimalloc/internal.h:792:10: error: incompatible integer to pointer conversion returning 'uintptr_t' (aka 'unsigned long long') from a function with result type 'mi_page_t *' (aka 'struct mi_page_s *') [-Wint-conversion]
  792 |   return mi_atomic_load_acquire(&page->self);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:50: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:49:35: note: expanded from macro 'mi_atomic'
   49 | #define  mi_atomic(name)          mi_atomic_##name
      |                                   ^
<scratch space>:143:1: note: expanded from here
  143 | mi_atomic_load_explicit
      | ^
2 errors generated.
[2/56] Building C object CMakeFiles/mimalloc.dir/src/alloc.c.obj
FAILED: [code=1] CMakeFiles/mimalloc.dir/src/alloc.c.obj
"C:\Program Files\LLVM\bin\clang.exe" -DMI_CMAKE_BUILD_TYPE=debug -DMI_DEBUG=2 -DMI_GIT_DESCRIBE=v3.5.0 -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -ID:/dev/mimalloc/include -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -Wno-static-in-inline -mno-outline -ftls-model=initial-exec -fno-builtin-malloc -MD -MT CMakeFiles/mimalloc.dir/src/alloc.c.obj -MF CMakeFiles\mimalloc.dir\src\alloc.c.obj.d -o CMakeFiles/mimalloc.dir/src/alloc.c.obj -c D:/dev/mimalloc/src/alloc.c
In file included from D:/dev/mimalloc/src/alloc.c:13:
D:/dev/mimalloc/include\mimalloc/internal.h:792:33: error: incompatible pointer types passing 'struct mi_page_s **' to parameter of type 'const uintptr_t *' (aka 'const unsigned long long *') [-Wincompatible-pointer-types]
  792 |   return mi_atomic_load_acquire(&page->self);
      |                                 ^~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:75: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                                           ^
D:/dev/mimalloc/include\mimalloc\atomic.h:220:75: note: passing argument to parameter 'p' here
  220 | static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) {
      |                                                                           ^
In file included from D:/dev/mimalloc/src/alloc.c:13:
D:/dev/mimalloc/include\mimalloc/internal.h:792:10: error: incompatible integer to pointer conversion returning 'uintptr_t' (aka 'unsigned long long') from a function with result type 'mi_page_t *' (aka 'struct mi_page_s *') [-Wint-conversion]
  792 |   return mi_atomic_load_acquire(&page->self);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:50: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:49:35: note: expanded from macro 'mi_atomic'
   49 | #define  mi_atomic(name)          mi_atomic_##name
      |                                   ^
<scratch space>:143:1: note: expanded from here
  143 | mi_atomic_load_explicit
      | ^
2 errors generated.
[3/56] Building C object CMakeFiles/mimalloc.dir/src/heap.c.obj
FAILED: [code=1] CMakeFiles/mimalloc.dir/src/heap.c.obj
"C:\Program Files\LLVM\bin\clang.exe" -DMI_CMAKE_BUILD_TYPE=debug -DMI_DEBUG=2 -DMI_GIT_DESCRIBE=v3.5.0 -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -ID:/dev/mimalloc/include -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -Wno-static-in-inline -mno-outline -ftls-model=initial-exec -fno-builtin-malloc -MD -MT CMakeFiles/mimalloc.dir/src/heap.c.obj -MF CMakeFiles\mimalloc.dir\src\heap.c.obj.d -o CMakeFiles/mimalloc.dir/src/heap.c.obj -c D:/dev/mimalloc/src/heap.c
In file included from D:/dev/mimalloc/src/heap.c:9:
D:/dev/mimalloc/include\mimalloc/internal.h:792:33: error: incompatible pointer types passing 'struct mi_page_s **' to parameter of type 'const uintptr_t *' (aka 'const unsigned long long *') [-Wincompatible-pointer-types]
  792 |   return mi_atomic_load_acquire(&page->self);
      |                                 ^~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:75: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                                           ^
D:/dev/mimalloc/include\mimalloc\atomic.h:220:75: note: passing argument to parameter 'p' here
  220 | static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) {
      |                                                                           ^
In file included from D:/dev/mimalloc/src/heap.c:9:
D:/dev/mimalloc/include\mimalloc/internal.h:792:10: error: incompatible integer to pointer conversion returning 'uintptr_t' (aka 'unsigned long long') from a function with result type 'mi_page_t *' (aka 'struct mi_page_s *') [-Wint-conversion]
  792 |   return mi_atomic_load_acquire(&page->self);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:50: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:49:35: note: expanded from macro 'mi_atomic'
   49 | #define  mi_atomic(name)          mi_atomic_##name
      |                                   ^
<scratch space>:143:1: note: expanded from here
  143 | mi_atomic_load_explicit
      | ^
2 errors generated.
[4/56] Building C object CMakeFiles/mimalloc.dir/src/alloc-posix.c.obj
FAILED: [code=1] CMakeFiles/mimalloc.dir/src/alloc-posix.c.obj
"C:\Program Files\LLVM\bin\clang.exe" -DMI_CMAKE_BUILD_TYPE=debug -DMI_DEBUG=2 -DMI_GIT_DESCRIBE=v3.5.0 -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -ID:/dev/mimalloc/include -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -Wno-static-in-inline -mno-outline -ftls-model=initial-exec -fno-builtin-malloc -MD -MT CMakeFiles/mimalloc.dir/src/alloc-posix.c.obj -MF CMakeFiles\mimalloc.dir\src\alloc-posix.c.obj.d -o CMakeFiles/mimalloc.dir/src/alloc-posix.c.obj -c D:/dev/mimalloc/src/alloc-posix.c
In file included from D:/dev/mimalloc/src/alloc-posix.c:13:
D:/dev/mimalloc/include\mimalloc/internal.h:792:33: error: incompatible pointer types passing 'struct mi_page_s **' to parameter of type 'const uintptr_t *' (aka 'const unsigned long long *') [-Wincompatible-pointer-types]
  792 |   return mi_atomic_load_acquire(&page->self);
      |                                 ^~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:75: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                                           ^
D:/dev/mimalloc/include\mimalloc\atomic.h:220:75: note: passing argument to parameter 'p' here
  220 | static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) {
      |                                                                           ^
In file included from D:/dev/mimalloc/src/alloc-posix.c:13:
D:/dev/mimalloc/include\mimalloc/internal.h:792:10: error: incompatible integer to pointer conversion returning 'uintptr_t' (aka 'unsigned long long') from a function with result type 'mi_page_t *' (aka 'struct mi_page_s *') [-Wint-conversion]
  792 |   return mi_atomic_load_acquire(&page->self);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:50: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:49:35: note: expanded from macro 'mi_atomic'
   49 | #define  mi_atomic(name)          mi_atomic_##name
      |                                   ^
<scratch space>:143:1: note: expanded from here
  143 | mi_atomic_load_explicit
      | ^
2 errors generated.
[5/56] Building C object CMakeFiles/mimalloc.dir/src/bitmap.c.obj
FAILED: [code=1] CMakeFiles/mimalloc.dir/src/bitmap.c.obj
"C:\Program Files\LLVM\bin\clang.exe" -DMI_CMAKE_BUILD_TYPE=debug -DMI_DEBUG=2 -DMI_GIT_DESCRIBE=v3.5.0 -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -ID:/dev/mimalloc/include -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -Wno-static-in-inline -mno-outline -ftls-model=initial-exec -fno-builtin-malloc -MD -MT CMakeFiles/mimalloc.dir/src/bitmap.c.obj -MF CMakeFiles\mimalloc.dir\src\bitmap.c.obj.d -o CMakeFiles/mimalloc.dir/src/bitmap.c.obj -c D:/dev/mimalloc/src/bitmap.c
In file included from D:/dev/mimalloc/src/bitmap.c:13:
D:/dev/mimalloc/include\mimalloc/internal.h:792:33: error: incompatible pointer types passing 'struct mi_page_s **' to parameter of type 'const uintptr_t *' (aka 'const unsigned long long *') [-Wincompatible-pointer-types]
  792 |   return mi_atomic_load_acquire(&page->self);
      |                                 ^~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:75: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                                           ^
D:/dev/mimalloc/include\mimalloc\atomic.h:220:75: note: passing argument to parameter 'p' here
  220 | static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) {
      |                                                                           ^
In file included from D:/dev/mimalloc/src/bitmap.c:13:
D:/dev/mimalloc/include\mimalloc/internal.h:792:10: error: incompatible integer to pointer conversion returning 'uintptr_t' (aka 'unsigned long long') from a function with result type 'mi_page_t *' (aka 'struct mi_page_s *') [-Wint-conversion]
  792 |   return mi_atomic_load_acquire(&page->self);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:50: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:49:35: note: expanded from macro 'mi_atomic'
   49 | #define  mi_atomic(name)          mi_atomic_##name
      |                                   ^
<scratch space>:143:1: note: expanded from here
  143 | mi_atomic_load_explicit
      | ^
2 errors generated.
[6/56] Building C object CMakeFiles/mimalloc.dir/src/arena.c.obj
FAILED: [code=1] CMakeFiles/mimalloc.dir/src/arena.c.obj
"C:\Program Files\LLVM\bin\clang.exe" -DMI_CMAKE_BUILD_TYPE=debug -DMI_DEBUG=2 -DMI_GIT_DESCRIBE=v3.5.0 -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -ID:/dev/mimalloc/include -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -Wno-static-in-inline -mno-outline -ftls-model=initial-exec -fno-builtin-malloc -MD -MT CMakeFiles/mimalloc.dir/src/arena.c.obj -MF CMakeFiles\mimalloc.dir\src\arena.c.obj.d -o CMakeFiles/mimalloc.dir/src/arena.c.obj -c D:/dev/mimalloc/src/arena.c
In file included from D:/dev/mimalloc/src/arena.c:23:
D:/dev/mimalloc/include\mimalloc/internal.h:792:33: error: incompatible pointer types passing 'struct mi_page_s **' to parameter of type 'const uintptr_t *' (aka 'const unsigned long long *') [-Wincompatible-pointer-types]
  792 |   return mi_atomic_load_acquire(&page->self);
      |                                 ^~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:75: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                                           ^
D:/dev/mimalloc/include\mimalloc\atomic.h:220:75: note: passing argument to parameter 'p' here
  220 | static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) {
      |                                                                           ^
In file included from D:/dev/mimalloc/src/arena.c:23:
D:/dev/mimalloc/include\mimalloc/internal.h:792:10: error: incompatible integer to pointer conversion returning 'uintptr_t' (aka 'unsigned long long') from a function with result type 'mi_page_t *' (aka 'struct mi_page_s *') [-Wint-conversion]
  792 |   return mi_atomic_load_acquire(&page->self);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:72:50: note: expanded from macro 'mi_atomic_load_acquire'
   72 | #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
      |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/dev/mimalloc/include\mimalloc\atomic.h:49:35: note: expanded from macro 'mi_atomic'
   49 | #define  mi_atomic(name)          mi_atomic_##name
      |                                   ^
<scratch space>:143:1: note: expanded from here
  143 | mi_atomic_load_explicit
      | ^
2 errors generated.
ninja: build stopped: subcommand failed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions