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