diff --git a/src/stage1.zig b/src/stage1.zig index e3f0daaa44..f4c9cbf8a1 100644 --- a/src/stage1.zig +++ b/src/stage1.zig @@ -40,10 +40,18 @@ pub fn main(argc: c_int, argv: [*][*:0]u8) callconv(.C) c_int { defer arena_instance.deinit(); const arena = arena_instance.allocator(); - const args = arena.alloc([]const u8, @intCast(usize, argc)) catch fatal("{s}", .{"OutOfMemory"}); - for (args) |*arg, i| { - arg.* = mem.sliceTo(argv[i], 0); - } + const args: []const []const u8 = args: { + if (builtin.os.tag == .windows) { + break :args std.process.argsAlloc(arena) catch fatal("{s}", .{"OutOfMemory"}); + } else { + const args = arena.alloc([]const u8, @intCast(usize, argc)) catch fatal("{s}", .{"OutOfMemory"}); + for (args) |*arg, i| { + arg.* = mem.sliceTo(argv[i], 0); + } + break :args args; + } + }; + if (builtin.mode == .Debug) { stage2.mainArgs(gpa, arena, args) catch unreachable; } else {