-
Notifications
You must be signed in to change notification settings - Fork 4.3k
deps: bump mimalloc to dev3 (bun-dev3-v2) #29251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
eb1bae3
f91d3cf
4ff1319
cc6c7e7
a0d69d0
7eb3fb5
d811dec
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -91,9 +91,10 @@ | |
| __aarch64_ldadd8_rel [LSE] | ||
| __aarch64_ldadd8_relax [LSE] | ||
| __aarch64_ldclr1_acq_rel [LSE] | ||
| __aarch64_ldclr2_acq_rel [LSE] | ||
| __aarch64_ldclr4_acq_rel [LSE] | ||
| __aarch64_ldclr8_acq_rel [LSE] | ||
| __aarch64_ldclr8_relax [LSE] | ||
|
Check warning on line 97 in scripts/verify-baseline-static/allowlist-aarch64.txt
|
||
|
Comment on lines
94
to
+97
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 The section header comment says Extended reasoning...What the bug is The compiler-rt outline atomics section header in The specific code path that triggers it The diff adds these four entries to the LSE section:
Counting the actual Why existing code doesn't prevent it The comment is a human-maintained annotation — there is no automated check that verifies the count in the comment matches the actual number of entries in the section. The allowlist itself works on symbol names, not on the count in the comment. What the impact would be Zero functional impact — the allowlist matcher uses symbol names, not the count. However, the comment exists to help maintainers quickly verify the allowlist is complete. A stale count of 41 when there are actually 45 entries could mislead a reviewer into thinking symbols are missing or that the section is incomplete, creating unnecessary confusion during audits. How to fix it Change the comment from Step-by-step proof
|
||
| __aarch64_ldeor1_acq_rel [LSE] | ||
| __aarch64_ldeor2_acq_rel [LSE] | ||
| __aarch64_ldeor4_acq_rel [LSE] | ||
|
|
@@ -102,6 +103,7 @@ | |
| __aarch64_ldset2_acq_rel [LSE] | ||
| __aarch64_ldset4_acq_rel [LSE] | ||
| __aarch64_ldset8_acq_rel [LSE] | ||
| __aarch64_ldset8_relax [LSE] | ||
| __aarch64_swp1_acq [LSE] | ||
| __aarch64_swp1_acq_rel [LSE] | ||
| __aarch64_swp1_relax [LSE] | ||
|
|
@@ -110,6 +112,8 @@ | |
| __aarch64_swp4_acq_rel [LSE] | ||
| __aarch64_swp4_rel [LSE] | ||
| __aarch64_swp8_acq_rel [LSE] | ||
| __aarch64_swp8_rel [LSE] | ||
| __aarch64_swp8_relax [LSE] | ||
|
|
||
|
|
||
| # ---------------------------------------------------------------------------- | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -8,9 +8,8 @@ const Self = @This(); | |||||||||||||||||||||
| /// | ||||||||||||||||||||||
| /// This type is a `GenericAllocator`; see `src/allocators.zig`. | ||||||||||||||||||||||
| pub const Default = struct { | ||||||||||||||||||||||
| pub fn allocator(self: Default) std.mem.Allocator { | ||||||||||||||||||||||
| _ = self; | ||||||||||||||||||||||
| return Borrowed.getDefault().allocator(); | ||||||||||||||||||||||
| pub fn allocator(_: Default) std.mem.Allocator { | ||||||||||||||||||||||
| return .{ .ptr = undefined, .vtable = &global_mimalloc_vtable }; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
| }; | ||||||||||||||||||||||
|
Comment on lines
8
to
14
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 The doc comment on Extended reasoning...What the bug is and how it manifests The doc comment on the This comment was accurate before this PR, when The specific code path that triggers it
Why existing code doesn't prevent it The stale comment is purely a documentation issue — there is no runtime check or assertion that catches incorrect comments. The implementation is correct; only the doc comment describing it is wrong. What the impact would be A developer reading the comment on How to fix it Update line 7 to reflect the new behavior: -/// Uses the default thread-local heap. This type is zero-sized.
+/// Routes allocations through mi_malloc/mi_free directly; no per-thread heap pointer is cached.
+/// This type is zero-sized.Step-by-step proof
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
@@ -23,11 +22,20 @@ pub const Borrowed = struct { | |||||||||||||||||||||
| #heap: BorrowedHeap, | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn allocator(self: Borrowed) std.mem.Allocator { | ||||||||||||||||||||||
| return .{ .ptr = self.#heap, .vtable = &c_allocator_vtable }; | ||||||||||||||||||||||
| return .{ .ptr = self.#heap, .vtable = &heap_allocator_vtable }; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| /// Prefer `Default.allocator()` / `getThreadLocalDefault()` for a thread-safe | ||||||||||||||||||||||
| /// global allocator. This returns the process-wide main heap so that | ||||||||||||||||||||||
| /// `gc()` / `ownsPtr()` on the result remain meaningful. | ||||||||||||||||||||||
| pub fn getDefault() Borrowed { | ||||||||||||||||||||||
| return .{ .#heap = getThreadHeap() }; | ||||||||||||||||||||||
| const heap = mimalloc.mi_heap_main(); | ||||||||||||||||||||||
| if (comptime !safety_checks) return .{ .#heap = heap }; | ||||||||||||||||||||||
| const S = struct { | ||||||||||||||||||||||
| threadlocal var dbg: ?DebugHeap = null; | ||||||||||||||||||||||
| }; | ||||||||||||||||||||||
| if (S.dbg == null) S.dbg = .{ .inner = heap, .thread_lock = .initLocked() }; | ||||||||||||||||||||||
| return .{ .#heap = &S.dbg.? }; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn gc(self: Borrowed) void { | ||||||||||||||||||||||
|
|
@@ -42,7 +50,7 @@ pub const Borrowed = struct { | |||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn ownsPtr(self: Borrowed, ptr: *const anyopaque) bool { | ||||||||||||||||||||||
| return mimalloc.mi_heap_check_owned(self.getMimallocHeap(), ptr); | ||||||||||||||||||||||
| return mimalloc.mi_heap_contains(self.getMimallocHeap(), ptr); | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| fn fromOpaque(ptr: *anyopaque) Borrowed { | ||||||||||||||||||||||
|
|
@@ -81,8 +89,8 @@ pub const Borrowed = struct { | |||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn downcast(std_alloc: std.mem.Allocator) Borrowed { | ||||||||||||||||||||||
| bun.assertf( | ||||||||||||||||||||||
| isInstance(std_alloc), | ||||||||||||||||||||||
| "not a MimallocArena (vtable is {*})", | ||||||||||||||||||||||
| std_alloc.vtable == &heap_allocator_vtable, | ||||||||||||||||||||||
| "not an owned MimallocArena heap (vtable is {*})", | ||||||||||||||||||||||
| .{std_alloc.vtable}, | ||||||||||||||||||||||
|
Comment on lines
+92
to
94
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== MimallocArena.isInstance call sites ==="
rg -n -C3 --glob '*.zig' 'MimallocArena\.isInstance\s*\('
echo
echo "=== Borrowed.downcast call sites ==="
rg -n -C3 --glob '*.zig' 'MimallocArena\.Borrowed\.downcast\s*\(|Borrowed\.downcast\s*\('Repository: oven-sh/bun Length of output: 1677 🏁 Script executed: # Check context around line 165 in src/safety/alloc.zig to see if downcast follows
cat -n src/safety/alloc.zig | sed -n '162,180p'Repository: oven-sh/bun Length of output: 838 🏁 Script executed: # Verify the actual vtable checks in MimallocArena.zig at the mentioned lines
echo "=== Lines 92-94 (Borrowed.downcast assertion) ==="
cat -n src/allocators/MimallocArena.zig | sed -n '90,96p'
echo ""
echo "=== Lines 264-265 (isInstance function) ==="
cat -n src/allocators/MimallocArena.zig | sed -n '263,267p'Repository: oven-sh/bun Length of output: 670 🏁 Script executed: # Check what vtables Default.allocator() and getThreadLocalDefault() produce
echo "=== Search for Default.allocator and getThreadLocalDefault ==="
rg -n -A5 'pub fn allocator\(\)' src/allocators/MimallocArena.zig
rg -n -A5 'pub fn getThreadLocalDefault' src/allocators/MimallocArena.zigRepository: oven-sh/bun Length of output: 384 🏁 Script executed: # Check if there are any other Borrowed usages beyond downcast that might have implicit safety assumptions
echo "=== Borrowed struct and all its methods ==="
rg -n -B2 -A8 'pub.*Borrowed' src/allocators/MimallocArena.zig | head -60Repository: oven-sh/bun Length of output: 2186 🏁 Script executed: # Look for Default.allocator() - the review mentions it produces global_mimalloc_vtable
echo "=== Default.allocator implementation ==="
rg -n -B2 -A5 'pub.*fn.*allocator.*\(\s*\)' src/allocators/MimallocArena.zig | grep -A5 "Default"
echo ""
echo "=== Check all public Default methods ==="
rg -n -B1 -A6 'pub const Default' src/allocators/MimallocArena.zigRepository: oven-sh/bun Length of output: 467 🏁 Script executed: # Double-check for any Borrowed.downcast calls that might exist
echo "=== Any downcast calls anywhere in codebase ==="
rg -n 'downcast\s*\(' --glob '*.zig' | grep -i mimalloc
echo ""
echo "=== Check if any code path could trigger downcast on global_mimalloc_vtable ==="
# Search for patterns that might combine isInstance check with downcast
rg -n -B5 -A5 'downcast' src/allocators/MimallocArena.zigRepository: oven-sh/bun Length of output: 747 🏁 Script executed: # Check the context around the downcast call in LinkerGraph.zig
echo "=== Context around downcast call in LinkerGraph.zig:420 ==="
cat -n src/bundler/LinkerGraph.zig | sed -n '410,430p'
echo ""
echo "=== Look at the class/struct definition for LinkerGraph to understand this.allocator ==="
rg -n -B5 -A15 'pub const LinkerGraph = struct' src/bundler/LinkerGraph.zig | head -40Repository: oven-sh/bun Length of output: 1070 🏁 Script executed: # Search for LinkerGraph's allocator field definition
echo "=== LinkerGraph allocator field ==="
rg -n 'allocator.*:' src/bundler/LinkerGraph.zig | head -20
echo ""
echo "=== Find where LinkerGraph is instantiated/created to see what allocator is passed ==="
rg -n 'LinkerGraph.*=' src/bundler/LinkerGraph.zig | head -10Repository: oven-sh/bun Length of output: 325 🏁 Script executed: # Search for LinkerGraph creation/init calls
echo "=== LinkerGraph creation patterns ==="
rg -n 'LinkerGraph\.init\(' --glob '*.zig' -B2 -A2
echo ""
echo "=== Alternative: search for LinkerGraph{...} construction ==="
rg -n 'LinkerGraph\s*\{' --glob '*.zig' -B2 -A2 | head -40Repository: oven-sh/bun Length of output: 580 Fix API contract between
Either narrow pub fn isInstance(alloc: std.mem.Allocator) bool {
- return alloc.vtable == &heap_allocator_vtable or alloc.vtable == &global_mimalloc_vtable;
+ return alloc.vtable == &heap_allocator_vtable;
}
+
+pub fn isMimallocBacked(alloc: std.mem.Allocator) bool {
+ return alloc.vtable == &heap_allocator_vtable or alloc.vtable == &global_mimalloc_vtable;
+}Alternatively, add a guard before the downcast in 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||
| ); | ||||||||||||||||||||||
| return .fromOpaque(std_alloc.ptr); | ||||||||||||||||||||||
|
|
@@ -98,19 +106,6 @@ const DebugHeap = struct { | |||||||||||||||||||||
| pub const deinit = void; | ||||||||||||||||||||||
| }; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| threadlocal var thread_heap: if (safety_checks) ?DebugHeap else void = if (safety_checks) null; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| fn getThreadHeap() BorrowedHeap { | ||||||||||||||||||||||
| if (comptime !safety_checks) return mimalloc.mi_heap_get_default(); | ||||||||||||||||||||||
| if (thread_heap == null) { | ||||||||||||||||||||||
| thread_heap = .{ | ||||||||||||||||||||||
| .inner = mimalloc.mi_heap_get_default(), | ||||||||||||||||||||||
| .thread_lock = .initLocked(), | ||||||||||||||||||||||
| }; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
| return &thread_heap.?; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| const log = bun.Output.scoped(.mimalloc, .hidden); | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn allocator(self: Self) std.mem.Allocator { | ||||||||||||||||||||||
|
|
@@ -121,13 +116,11 @@ pub fn borrow(self: Self) Borrowed { | |||||||||||||||||||||
| return .{ .#heap = if (comptime safety_checks) self.#heap.get() else self.#heap }; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| /// Internally, mimalloc calls mi_heap_get_default() | ||||||||||||||||||||||
| /// to get the default heap. | ||||||||||||||||||||||
| /// It uses pthread_getspecific to do that. | ||||||||||||||||||||||
| /// We can save those extra calls if we just do it once in here | ||||||||||||||||||||||
| /// In v3, `mi_malloc`/`mi_free` are already thread-local-fast — there is no | ||||||||||||||||||||||
| /// per-thread default heap to cache. Route through the global vtable. | ||||||||||||||||||||||
| pub fn getThreadLocalDefault() std.mem.Allocator { | ||||||||||||||||||||||
| if (bun.Environment.enable_asan) return bun.default_allocator; | ||||||||||||||||||||||
| return Borrowed.getDefault().allocator(); | ||||||||||||||||||||||
| return .{ .ptr = undefined, .vtable = &global_mimalloc_vtable }; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn backingAllocator(_: Self) std.mem.Allocator { | ||||||||||||||||||||||
|
|
@@ -251,17 +244,43 @@ fn vtable_remap(ptr: *anyopaque, buf: []u8, alignment: Alignment, new_len: usize | |||||||||||||||||||||
| return @ptrCast(value); | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| fn global_vtable_alloc(_: *anyopaque, len: usize, alignment: Alignment, _: usize) ?[*]u8 { | ||||||||||||||||||||||
| log("Malloc: {d}\n", .{len}); | ||||||||||||||||||||||
| const ptr: ?*anyopaque = if (mimalloc.mustUseAlignedAlloc(alignment)) | ||||||||||||||||||||||
| mimalloc.mi_malloc_aligned(len, alignment.toByteUnits()) | ||||||||||||||||||||||
| else | ||||||||||||||||||||||
| mimalloc.mi_malloc(len); | ||||||||||||||||||||||
| return if (ptr) |p| @ptrCast(p) else null; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| fn global_vtable_resize(_: *anyopaque, buf: []u8, _: Alignment, new_len: usize, _: usize) bool { | ||||||||||||||||||||||
|
Comment on lines
244
to
+256
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 The new Extended reasoning...What the bug is:
if (comptime bun.Environment.isDebug) {
const usable = mimalloc.mi_malloc_usable_size(ptr);
if (usable < len) {
std.debug.panic("mimalloc: allocated size is too small: {d} < {d}", .{ usable, len });
}
}The new The specific code path:
Why existing code doesn't prevent it: The check in Impact: In debug builds, any allocation going through How to fix: Add the same debug assertion in fn global_vtable_alloc(_: *anyopaque, len: usize, alignment: Alignment, _: usize) ?[*]u8 {
log("Malloc: {d}\n", .{len});
const ptr: ?*anyopaque = if (mimalloc.mustUseAlignedAlloc(alignment))
mimalloc.mi_malloc_aligned(len, alignment.toByteUnits())
else
mimalloc.mi_malloc(len);
if (comptime bun.Environment.isDebug) {
const usable = mimalloc.mi_malloc_usable_size(ptr);
if (usable < len) {
std.debug.panic("mimalloc: allocated size is too small: {d} < {d}", .{ usable, len });
}
}
return if (ptr) |p| @ptrCast(p) else null;
}Step-by-step proof:
|
||||||||||||||||||||||
| return mimalloc.mi_expand(buf.ptr, new_len) != null; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| fn global_vtable_remap(_: *anyopaque, buf: []u8, alignment: Alignment, new_len: usize, _: usize) ?[*]u8 { | ||||||||||||||||||||||
| return @ptrCast(mimalloc.mi_realloc_aligned(buf.ptr, new_len, alignment.toByteUnits())); | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| pub fn isInstance(alloc: std.mem.Allocator) bool { | ||||||||||||||||||||||
| return alloc.vtable == &c_allocator_vtable; | ||||||||||||||||||||||
| return alloc.vtable == &heap_allocator_vtable or alloc.vtable == &global_mimalloc_vtable; | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| const c_allocator_vtable = std.mem.Allocator.VTable{ | ||||||||||||||||||||||
| /// VTable for owned heaps created with `mi_heap_new`. | ||||||||||||||||||||||
| const heap_allocator_vtable = std.mem.Allocator.VTable{ | ||||||||||||||||||||||
| .alloc = vtable_alloc, | ||||||||||||||||||||||
| .resize = vtable_resize, | ||||||||||||||||||||||
| .remap = vtable_remap, | ||||||||||||||||||||||
| .free = vtable_free, | ||||||||||||||||||||||
| }; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| /// VTable for the process-wide default allocator (`mi_malloc`/`mi_free`). | ||||||||||||||||||||||
| const global_mimalloc_vtable = std.mem.Allocator.VTable{ | ||||||||||||||||||||||
| .alloc = global_vtable_alloc, | ||||||||||||||||||||||
| .resize = global_vtable_resize, | ||||||||||||||||||||||
| .remap = global_vtable_remap, | ||||||||||||||||||||||
| .free = vtable_free, | ||||||||||||||||||||||
| }; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
Comment on lines
+268
to
+283
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 The PR splits the single mimalloc vtable into two (heap_allocator_vtable for owned heaps, global_mimalloc_vtable for the global allocator), but isInstance() returns true for both while Borrowed.downcast() only accepts heap_allocator_vtable — any code following the natural isInstance-then-downcast idiom will panic at the assertf for global-vtable allocators. No existing callers use this pattern today, so there is no immediate breakage, but the API contract is misleading since isInstance() returning true no longer implies downcast() will succeed. Extended reasoning...What the bug is and how it manifests This PR intentionally splits the old single The specific code path that triggers it
Why existing code does not prevent it Before this PR, What the impact would be The conventional semantic of How to fix it Two reasonable options: (1) Rename Step-by-step proof
|
||||||||||||||||||||||
| const std = @import("std"); | ||||||||||||||||||||||
| const Alignment = std.mem.Alignment; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 37
🏁 Script executed:
cat -n scripts/build/deps/mimalloc.ts | head -50Repository: oven-sh/bun
Length of output: 2108
🌐 Web query:
mimalloc v3 Windows static library names CMake MI_BUILD_STATIC💡 Result:
For mimalloc v3 on Windows using CMake with MI_BUILD_STATIC enabled, the static library target is named "mimalloc-static". The output library file is mimalloc-static.lib (on Windows) or libmimalloc-static.a (on Unix-like systems). The CMake option MI_BUILD_STATIC (default ON) controls whether the static library is built: option(MI_BUILD_STATIC "Build static library" ON). To link, use target_link_libraries(myapp PUBLIC mimalloc-static) after find_package(mimalloc CONFIG REQUIRED). This applies to v3.x releases (e.g., v3.2.8 as of 2026), consistent with v2 behavior. Note that Visual Studio .sln builds mimalloc-lib.lib directly, but CMake uses the -static suffix to avoid naming conflicts with DLL import libs.
Citations:
mimalloc.dllmicrosoft/mimalloc#903🏁 Script executed:
sed -n '115,130p' scripts/build/deps/mimalloc.tsRepository: oven-sh/bun
Length of output: 565
🏁 Script executed:
sed -n '115,145p' scripts/build/deps/mimalloc.tsRepository: oven-sh/bun
Length of output: 1453
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 213
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 565
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 565
🏁 Script executed:
git diff a8ee0d38^..a8ee0d38 -- scripts/build/deps/mimalloc.ts | head -60Repository: oven-sh/bun
Length of output: 2100
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 950
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 141
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 1146
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 1708
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 158
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 37
🏁 Script executed:
git show f91d3cf9 --stat | head -20Repository: oven-sh/bun
Length of output: 1133
🏁 Script executed:
git show f91d3cf9 -- scripts/build/deps/mimalloc.ts | head -100Repository: oven-sh/bun
Length of output: 3941
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 332
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 37
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 37
🏁 Script executed:
# Check the commit just before f91d3cf9 git log --oneline -10 f91d3cf9^..HEAD -- scripts/build/deps/mimalloc.tsRepository: oven-sh/bun
Length of output: 94
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 254
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 560
🏁 Script executed:
# Find all commits between a8ee0d38 and f91d3cf9 that modified mimalloc.ts git log --oneline a8ee0d38..f91d3cf9 -- scripts/build/deps/mimalloc.tsRepository: oven-sh/bun
Length of output: 158
🏁 Script executed:
# Look at the current HEAD commit message to understand the context git show --quiet f91d3cf9Repository: oven-sh/bun
Length of output: 691
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 66
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 70
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 782
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 1708
🏁 Script executed:
Repository: oven-sh/bun
Length of output: 1734
Fix Windows library name mismatch in CMake targets.
The CMake targets still build
mimalloc-static(line 110), but the Windowsprovides()function looks formimallocandmimalloc-debug(lines 123–124). This mismatch will cause link failures. Either revert the Windows libname back tomimalloc-static-debug/mimalloc-staticto match the targets, or update the targets array to remove the-staticsuffix to match the libname.🤖 Prompt for AI Agents