| ... | @@ -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, .{ |
| 6379 | | 6379 | .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 | }); | | |
| 6386 | | 6384 | |
| 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))); |
| 6389 | | 6387 | |
| 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 }); |
| 6392 | | 6390 | |
| 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); |