authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-05-09 04:57:58+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-05-09 16:43:57+02:00
log7199cfc21fa8c278d568b268a129c2a4410fec78
tree3428fc0bdbe0b019672d827a6f4af4f8ebc033c8
parentb1082a31a5701961fbbc7cd1dfcdb7172c85e50f
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Compilation: don't warn about failure to delete missing C depfile

If clang encountered bad imports, the depfile will not be generated. It doesn't make sense to warn the user in this case. In fact, `FileNotFound` is never worth warning about here; it just means that the file we were deleting to save space isn't there in the first place! If the missing file actually affected the compilation (e.g. another process raced to delete it for some reason) we would already error in the normal code path which reads these files, so we can safely omit the warning in the `FileNotFound` case always, only warning when the file might still exist. To see what this fixes, create the following file... ```c #include <nonexist> ``` ...and run `zig build-obj` on it. Before this commit, you will get a redundant warning; after this commit, that warning is gone.

1 files changed, 6 insertions(+), 4 deletions(-)

src/Compilation.zig+6-4
...@@ -5113,11 +5113,13 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr...@@ -5113,11 +5113,13 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr
5113 }5113 }
51145114
5115 // Just to save disk space, we delete the files that are never needed again.5115 // Just to save disk space, we delete the files that are never needed again.
5116 defer if (out_diag_path) |diag_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(diag_file_path)) catch |err| {5116 defer if (out_diag_path) |diag_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(diag_file_path)) catch |err| switch (err) {
5117 log.warn("failed to delete '{s}': {s}", .{ diag_file_path, @errorName(err) });5117 error.FileNotFound => {}, // the file wasn't created due to an error we reported
5118 else => log.warn("failed to delete '{s}': {s}", .{ diag_file_path, @errorName(err) }),
5118 };5119 };
5119 defer if (out_dep_path) |dep_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(dep_file_path)) catch |err| {5120 defer if (out_dep_path) |dep_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(dep_file_path)) catch |err| switch (err) {
5120 log.warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) });5121 error.FileNotFound => {}, // the file wasn't created due to an error we reported
5122 else => log.warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) }),
5121 };5123 };
5122 if (std.process.can_spawn) {5124 if (std.process.can_spawn) {
5123 var child = std.process.Child.init(argv.items, arena);5125 var child = std.process.Child.init(argv.items, arena);