| ... | @@ -746,7 +746,12 @@ fn convertPathArg(run: *Run, path: Build.Cache.Path) []const u8 { | ... | @@ -746,7 +746,12 @@ fn convertPathArg(run: *Run, path: Build.Cache.Path) []const u8 { |
| 746 | // Convert it from relative to *our* cwd, to relative to the *child's* cwd. | 746 | // Convert it from relative to *our* cwd, to relative to the *child's* cwd. |
| 747 | break :rel std.fs.path.relative(b.graph.arena, child_cwd, path_str) catch @panic("OOM"); | 747 | break :rel std.fs.path.relative(b.graph.arena, child_cwd, path_str) catch @panic("OOM"); |
| 748 | }; | 748 | }; |
| 749 | assert(!std.fs.path.isAbsolute(child_cwd_rel)); | 749 | // Not every path can be made relative, e.g. if the path and the child cwd are on different |
| | 750 | // disk designators on Windows. In that case, `relative` will return an absolute path which we can |
| | 751 | // just return. |
| | 752 | if (std.fs.path.isAbsolute(child_cwd_rel)) { |
| | 753 | return child_cwd_rel; |
| | 754 | } |
| 750 | // We're not done yet. In some cases this path must be prefixed with './': | 755 | // We're not done yet. In some cases this path must be prefixed with './': |
| 751 | // * On POSIX, the executable name cannot be a single component like 'foo' | 756 | // * On POSIX, the executable name cannot be a single component like 'foo' |
| 752 | // * Some executables might treat a leading '-' like a flag, which we must avoid | 757 | // * Some executables might treat a leading '-' like a flag, which we must avoid |