aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-10-05 00:42:08 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-10-05 00:42:08 -0700
commit6152f043c0446ace7c992c33f27174152d9bd8a0 (patch)
tree3d73c8928927539942ede4ef931d2ca0d8cec9e7
parentf4c6e5d94e1d06a2b438632de0808947f6561798 (diff)
downloadzig-6152f043c0446ace7c992c33f27174152d9bd8a0.tar.gz
zig-6152f043c0446ace7c992c33f27174152d9bd8a0.zip
stage2: resolve file before putting them into cache
This was an accidental misuse of the Cache API which intends to call resolve on all file paths going into it. This one callsite was failing to do that; fixed now. Fixes relative file paths from making it into the global cache manifest. See #13050
-rw-r--r--src/Module.zig14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/Module.zig b/src/Module.zig
index 959c2ab4b2..b268e3a4cc 100644
--- a/src/Module.zig
+++ b/src/Module.zig
@@ -4478,9 +4478,17 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {
try reportRetryableFileError(mod, file, "unable to load source: {s}", .{@errorName(err)});
return error.AnalysisFail;
};
- const resolved_path = try file.pkg.root_src_directory.join(gpa, &.{
- file.sub_file_path,
- });
+
+ const resolved_path = std.fs.path.resolve(
+ gpa,
+ if (file.pkg.root_src_directory.path) |pkg_path|
+ &[_][]const u8{ pkg_path, file.sub_file_path }
+ else
+ &[_][]const u8{file.sub_file_path},
+ ) catch |err| {
+ try reportRetryableFileError(mod, file, "unable to resolve path: {s}", .{@errorName(err)});
+ return error.AnalysisFail;
+ };
errdefer gpa.free(resolved_path);
try man.addFilePostContents(resolved_path, source.bytes, source.stat);