aboutsummaryrefslogtreecommitdiff
path: root/src/Compilation.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compilation.zig')
-rw-r--r--src/Compilation.zig22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index 2c94785618..795eb493e2 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -201,7 +201,9 @@ pub const CRTFile = struct {
/// For passing to a C compiler.
pub const CSourceFile = struct {
src_path: []const u8,
- extra_flags: []const []const u8 = &[0][]const u8{},
+ extra_flags: []const []const u8 = &.{},
+ /// Same as extra_flags except they are not added to the Cache hash.
+ cache_exempt_flags: []const []const u8 = &.{},
};
const Job = union(enum) {
@@ -3251,13 +3253,6 @@ fn processOneJob(comp: *Compilation, job: Job) !void {
const module = comp.bin_file.options.module.?;
module.semaPkg(pkg) catch |err| switch (err) {
- error.CurrentWorkingDirectoryUnlinked,
- error.Unexpected,
- => comp.lockAndSetMiscFailure(
- .analyze_pkg,
- "unexpected problem analyzing package '{s}'",
- .{pkg.root_src_path},
- ),
error.OutOfMemory => return error.OutOfMemory,
error.AnalysisFail => return,
};
@@ -3562,7 +3557,14 @@ pub fn obtainCObjectCacheManifest(comp: *const Compilation) Cache.Manifest {
man.hash.add(comp.sanitize_c);
man.hash.addListOfBytes(comp.clang_argv);
man.hash.add(comp.bin_file.options.link_libcpp);
- man.hash.addListOfBytes(comp.libc_include_dir_list);
+
+ // When libc_installation is null it means that Zig generated this dir list
+ // based on the zig library directory alone. The zig lib directory file
+ // path is purposefully either in the cache or not in the cache. The
+ // decision should not be overridden here.
+ if (comp.bin_file.options.libc_installation != null) {
+ man.hash.addListOfBytes(comp.libc_include_dir_list);
+ }
return man;
}
@@ -3949,6 +3951,7 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
{
try comp.addCCArgs(arena, &argv, ext, null);
try argv.appendSlice(c_object.src.extra_flags);
+ try argv.appendSlice(c_object.src.cache_exempt_flags);
const out_obj_path = if (comp.bin_file.options.emit) |emit|
try emit.directory.join(arena, &.{emit.sub_path})
@@ -3990,6 +3993,7 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
try std.fmt.allocPrint(arena, "{s}.d", .{out_obj_path});
try comp.addCCArgs(arena, &argv, ext, out_dep_path);
try argv.appendSlice(c_object.src.extra_flags);
+ try argv.appendSlice(c_object.src.cache_exempt_flags);
try argv.ensureUnusedCapacity(5);
switch (comp.clang_preprocessor_mode) {