authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-03 00:52:37-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-04 00:27:09-08:00
log88dd682155a38843517ca79ae84f1f0a0d3c5cf9
treee7f8e5eb6babc73720ad9f2bd7ebfa7704eb6bea
parentdd7be75f7c5a52f838eca0d3f3cd3c7b552adff1

Compilation: revert bad code transformation

I added `unreachable` in this branch based on a misunderstanding of the original control flow.

1 files changed, 30 insertions(+), 31 deletions(-)

src/Compilation.zig+30-31
...@@ -6374,41 +6374,40 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr...@@ -6374,41 +6374,40 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr
6374 },6374 },
6375 else => std.process.abort(),6375 else => std.process.abort(),
6376 }6376 }
6377 unreachable;6377 } else {
6378 }6378 var child = try std.process.spawn(io, .{
63796379 .argv = argv.items,
6380 var child = try std.process.spawn(io, .{6380 .stdin = .ignore,
6381 .argv = argv.items,6381 .stdout = .ignore,
6382 .stdin = .ignore,6382 .stderr = .pipe,
6383 .stdout = .ignore,6383 });
6384 .stderr = .pipe,
6385 });
63866384
6387 var stderr_reader = child.stderr.?.readerStreaming(io, &.{});6385 var stderr_reader = child.stderr.?.readerStreaming(io, &.{});
6388 const stderr = try stderr_reader.interface.allocRemaining(arena, .limited(std.math.maxInt(u32)));6386 const stderr = try stderr_reader.interface.allocRemaining(arena, .limited(std.math.maxInt(u32)));
63896387
6390 const term = child.wait(io) catch |err|6388 const term = child.wait(io) catch |err|
6391 return comp.failCObj(c_object, "failed to spawn zig clang {s}: {t}", .{ argv.items[0], err });6389 return comp.failCObj(c_object, "failed to spawn zig clang {s}: {t}", .{ argv.items[0], err });
63926390
6393 switch (term) {6391 switch (term) {
6394 .exited => |code| if (code != 0) if (out_diag_path) |diag_file_path| {6392 .exited => |code| if (code != 0) if (out_diag_path) |diag_file_path| {
6395 const bundle = CObject.Diag.Bundle.parse(gpa, io, diag_file_path) catch |err| {6393 const bundle = CObject.Diag.Bundle.parse(gpa, io, diag_file_path) catch |err| {
6396 log.err("{}: failed to parse clang diagnostics: {s}", .{ err, stderr });6394 log.err("{}: failed to parse clang diagnostics: {s}", .{ err, stderr });
6395 return comp.failCObj(c_object, "clang exited with code {d}", .{code});
6396 };
6397 return comp.failCObjWithOwnedDiagBundle(c_object, bundle);
6398 } else {
6399 log.err("clang failed with stderr: {s}", .{stderr});
6397 return comp.failCObj(c_object, "clang exited with code {d}", .{code});6400 return comp.failCObj(c_object, "clang exited with code {d}", .{code});
6398 };6401 },
6399 return comp.failCObjWithOwnedDiagBundle(c_object, bundle);6402 .signal => |sig| {
6400 } else {6403 log.err("clang failed with stderr: {s}", .{stderr});
6401 log.err("clang failed with stderr: {s}", .{stderr});6404 return comp.failCObj(c_object, "clang terminated with signal {t}", .{sig});
6402 return comp.failCObj(c_object, "clang exited with code {d}", .{code});6405 },
6403 },6406 else => {
6404 .signal => |sig| {6407 log.err("clang terminated with stderr: {s}", .{stderr});
6405 log.err("clang failed with stderr: {s}", .{stderr});6408 return comp.failCObj(c_object, "clang terminated unexpectedly", .{});
6406 return comp.failCObj(c_object, "clang terminated with signal {t}", .{sig});6409 },
6407 },6410 }
6408 else => {
6409 log.err("clang terminated with stderr: {s}", .{stderr});
6410 return comp.failCObj(c_object, "clang terminated unexpectedly", .{});
6411 },
6412 }6411 }
6413 } else {6412 } else {
6414 const exit_code = try clangMain(arena, argv.items);6413 const exit_code = try clangMain(arena, argv.items);