From e3a79a05da623be3d4937123b35f16ee4d7139e2 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Wed, 5 Nov 2025 20:17:07 -0800 Subject: [PATCH] Step.Run: Fix for `convertPathArg` when cwd and path args are on different drives Fixes #25805 --- lib/std/Build/Step/Run.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/std/Build/Step/Run.zig b/lib/std/Build/Step/Run.zig index eb1de3dd3b7b..2143cf9b02b8 100644 --- a/lib/std/Build/Step/Run.zig +++ b/lib/std/Build/Step/Run.zig @@ -746,7 +746,12 @@ fn convertPathArg(run: *Run, path: Build.Cache.Path) []const u8 { // Convert it from relative to *our* cwd, to relative to the *child's* cwd. break :rel std.fs.path.relative(b.graph.arena, child_cwd, path_str) catch @panic("OOM"); }; - assert(!std.fs.path.isAbsolute(child_cwd_rel)); + // Not every path can be made relative, e.g. if the path and the child cwd are on different + // disk designators on Windows. In that case, `relative` will return an absolute path which we can + // just return. + if (std.fs.path.isAbsolute(child_cwd_rel)) { + return child_cwd_rel; + } // We're not done yet. In some cases this path must be prefixed with './': // * On POSIX, the executable name cannot be a single component like 'foo' // * Some executables might treat a leading '-' like a flag, which we must avoid