| ... | @@ -4526,7 +4526,12 @@ fn cmdTranslateC( | ... | @@ -4526,7 +4526,12 @@ fn cmdTranslateC( |
| 4526 | Compilation.dump_argv(argv.items); | 4526 | Compilation.dump_argv(argv.items); |
| 4527 | } | 4527 | } |
| 4528 | | 4528 | |
| 4529 | const formatted = switch (comp.config.c_frontend) { | 4529 | const Result = union(enum) { |
| | 4530 | success: []const u8, |
| | 4531 | error_bundle: std.zig.ErrorBundle, |
| | 4532 | }; |
| | 4533 | |
| | 4534 | const result: Result = switch (comp.config.c_frontend) { |
| 4530 | .aro => f: { | 4535 | .aro => f: { |
| 4531 | var stdout: []u8 = undefined; | 4536 | var stdout: []u8 = undefined; |
| 4532 | try jitCmd(comp.gpa, arena, argv.items, .{ | 4537 | try jitCmd(comp.gpa, arena, argv.items, .{ |
| ... | @@ -4536,7 +4541,7 @@ fn cmdTranslateC( | ... | @@ -4536,7 +4541,7 @@ fn cmdTranslateC( |
| 4536 | .capture = &stdout, | 4541 | .capture = &stdout, |
| 4537 | .progress_node = prog_node, | 4542 | .progress_node = prog_node, |
| 4538 | }); | 4543 | }); |
| 4539 | break :f stdout; | 4544 | break :f .{ .success = stdout }; |
| 4540 | }, | 4545 | }, |
| 4541 | .clang => f: { | 4546 | .clang => f: { |
| 4542 | if (!build_options.have_llvm) unreachable; | 4547 | if (!build_options.have_llvm) unreachable; |
| ... | @@ -4564,31 +4569,43 @@ fn cmdTranslateC( | ... | @@ -4564,31 +4569,43 @@ fn cmdTranslateC( |
| 4564 | c_headers_dir_path_z, | 4569 | c_headers_dir_path_z, |
| 4565 | ) catch |err| switch (err) { | 4570 | ) catch |err| switch (err) { |
| 4566 | error.OutOfMemory => return error.OutOfMemory, | 4571 | error.OutOfMemory => return error.OutOfMemory, |
| 4567 | error.SemanticAnalyzeFail => { | 4572 | error.SemanticAnalyzeFail => break :f .{ .error_bundle = errors }, |
| 4568 | if (fancy_output) |p| { | | |
| 4569 | p.errors = errors; | | |
| 4570 | return; | | |
| 4571 | } else { | | |
| 4572 | errors.renderToStdErr(color.renderOptions()); | | |
| 4573 | process.exit(1); | | |
| 4574 | } | | |
| 4575 | }, | | |
| 4576 | }; | 4573 | }; |
| 4577 | defer tree.deinit(comp.gpa); | 4574 | defer tree.deinit(comp.gpa); |
| 4578 | break :f try tree.render(arena); | 4575 | break :f .{ .success = try tree.render(arena) }; |
| 4579 | }, | 4576 | }, |
| 4580 | }; | 4577 | }; |
| 4581 | | 4578 | |
| 4582 | if (out_dep_path) |dep_file_path| { | 4579 | if (out_dep_path) |dep_file_path| add_deps: { |
| 4583 | const dep_basename = fs.path.basename(dep_file_path); | 4580 | const dep_basename = fs.path.basename(dep_file_path); |
| 4584 | // Add the files depended on to the cache system. | 4581 | // Add the files depended on to the cache system. |
| 4585 | try man.addDepFilePost(zig_cache_tmp_dir, dep_basename); | 4582 | man.addDepFilePost(zig_cache_tmp_dir, dep_basename) catch |err| switch (err) { |
| | 4583 | error.FileNotFound => { |
| | 4584 | // Clang didn't emit the dep file; nothing to add to the manifest. |
| | 4585 | break :add_deps; |
| | 4586 | }, |
| | 4587 | else => |e| return e, |
| | 4588 | }; |
| 4586 | // Just to save disk space, we delete the file because it is never needed again. | 4589 | // Just to save disk space, we delete the file because it is never needed again. |
| 4587 | zig_cache_tmp_dir.deleteFile(dep_basename) catch |err| { | 4590 | zig_cache_tmp_dir.deleteFile(dep_basename) catch |err| { |
| 4588 | warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) }); | 4591 | warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) }); |
| 4589 | }; | 4592 | }; |
| 4590 | } | 4593 | } |
| 4591 | | 4594 | |
| | 4595 | const formatted = switch (result) { |
| | 4596 | .success => |formatted| formatted, |
| | 4597 | .error_bundle => |eb| { |
| | 4598 | if (file_system_inputs) |buf| try man.populateFileSystemInputs(buf); |
| | 4599 | if (fancy_output) |p| { |
| | 4600 | p.errors = eb; |
| | 4601 | return; |
| | 4602 | } else { |
| | 4603 | eb.renderToStdErr(color.renderOptions()); |
| | 4604 | process.exit(1); |
| | 4605 | } |
| | 4606 | }, |
| | 4607 | }; |
| | 4608 | |
| 4592 | const bin_digest = man.finalBin(); | 4609 | const bin_digest = man.finalBin(); |
| 4593 | const hex_digest = Cache.binToHex(bin_digest); | 4610 | const hex_digest = Cache.binToHex(bin_digest); |
| 4594 | | 4611 | |