aboutsummaryrefslogtreecommitdiff
path: root/src/Compilation.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2024-05-22 08:18:44 -0400
committerAndrew Kelley <andrew@ziglang.org>2024-05-22 10:42:01 -0400
commited75f62568f64c0d3859aab35aaf5289c3f07026 (patch)
tree6dd2ebc0520ed61c8221e04a01b4b2f715f5520c /src/Compilation.zig
parent0286970b19249a36edac35fe2ee7caac8fbe927c (diff)
downloadzig-ed75f62568f64c0d3859aab35aaf5289c3f07026.tar.gz
zig-ed75f62568f64c0d3859aab35aaf5289c3f07026.zip
Compilation: better cleanup of temporary files
The diag file did not get deleted on the success path and the dep file did not get deleted on the failure path.
Diffstat (limited to 'src/Compilation.zig')
-rw-r--r--src/Compilation.zig23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index b830311733..37df4cc838 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -4568,7 +4568,10 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
// We can't know the digest until we do the C compiler invocation,
// so we need a temporary filename.
const out_obj_path = try comp.tmpFilePath(arena, o_basename);
- const out_diag_path = try std.fmt.allocPrint(arena, "{s}.diag", .{out_obj_path});
+ const out_diag_path = if (comp.clang_passthrough_mode)
+ undefined
+ else
+ try std.fmt.allocPrint(arena, "{s}.diag", .{out_obj_path});
var zig_cache_tmp_dir = try comp.local_cache_directory.handle.makeOpenPath("tmp", .{});
defer zig_cache_tmp_dir.close();
@@ -4603,6 +4606,13 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
dump_argv(argv.items);
}
+ // Just to save disk space, we delete the files that are never needed again.
+ defer if (!comp.clang_passthrough_mode) zig_cache_tmp_dir.deleteFile(std.fs.path.basename(out_diag_path)) catch |err| {
+ log.warn("failed to delete '{s}': {s}", .{ out_diag_path, @errorName(err) });
+ };
+ defer if (out_dep_path) |dep_file_path| zig_cache_tmp_dir.deleteFile(std.fs.path.basename(dep_file_path)) catch |err| {
+ log.warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) });
+ };
if (std.process.can_spawn) {
var child = std.ChildProcess.init(argv.items, arena);
if (comp.clang_passthrough_mode) {
@@ -4643,9 +4653,6 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
log.err("{}: failed to parse clang diagnostics: {s}", .{ err, stderr });
return comp.failCObj(c_object, "clang exited with code {d}", .{code});
};
- zig_cache_tmp_dir.deleteFile(out_diag_path) catch |err| {
- log.warn("failed to delete '{s}': {s}", .{ out_diag_path, @errorName(err) });
- };
return comp.failCObjWithOwnedDiagBundle(c_object, bundle);
}
},
@@ -4685,10 +4692,6 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
},
.incremental => {},
}
- // Just to save disk space, we delete the file because it is never needed again.
- zig_cache_tmp_dir.deleteFile(dep_basename) catch |err| {
- log.warn("failed to delete '{s}': {s}", .{ dep_file_path, @errorName(err) });
- };
}
// We don't actually care whether it's a cache hit or miss; we just need the digest and the lock.
@@ -4924,10 +4927,6 @@ fn updateWin32Resource(comp: *Compilation, win32_resource: *Win32Resource, win32
.incremental => {},
}
}
- // Just to save disk space, we delete the file because it is never needed again.
- zig_cache_tmp_dir.deleteFile(dep_basename) catch |err| {
- log.warn("failed to delete '{s}': {s}", .{ out_dep_path, @errorName(err) });
- };
}
// Rename into place.