Skip to content

Commit 787020b

Browse files
committed
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 parent a5cfa3d commit 787020b

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/Compilation.zig

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5174,11 +5174,13 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr
51745174
}
51755175

51765176
// Just to save disk space, we delete the files that are never needed again.
5177-
defer if (out_diag_path) |diag_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(diag_file_path)) catch |err| {
5178-
log.warn("failed to delete '{s}': {s}", .{ diag_file_path, @errorName(err) });
5177+
defer if (out_diag_path) |diag_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(diag_file_path)) catch |err| switch (err) {
5178+
error.FileNotFound => {}, // the file wasn't created due to an error we reported
5179+
else => log.warn("failed to delete '{s}': {s}", .{ diag_file_path, @errorName(err) }),
51795180
};
5180-
defer if (out_dep_path) |dep_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(dep_file_path)) catch |err| {
5181-
log.warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) });
5181+
defer if (out_dep_path) |dep_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(dep_file_path)) catch |err| switch (err) {
5182+
error.FileNotFound => {}, // the file wasn't created due to an error we reported
5183+
else => log.warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) }),
51825184
};
51835185
if (std.process.can_spawn) {
51845186
var child = std.process.Child.init(argv.items, arena);

0 commit comments

Comments
 (0)