diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-10-16 14:38:46 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-10-23 16:27:38 -0700 |
| commit | cbcd67ea90979eca4a2b46838c54472058886fed (patch) | |
| tree | 0b6db2084dc256dc2c58151803131e2db395004e /src | |
| parent | 65d42086ffbd6d7dea2b9a43b97bfc1e437f8a82 (diff) | |
| download | zig-cbcd67ea90979eca4a2b46838c54472058886fed.tar.gz zig-cbcd67ea90979eca4a2b46838c54472058886fed.zip | |
link.MachO: fix missing input classification
Diffstat (limited to 'src')
| -rw-r--r-- | src/link.zig | 4 | ||||
| -rw-r--r-- | src/link/MachO.zig | 18 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/link.zig b/src/link.zig index 9363876cb2..49875c532b 100644 --- a/src/link.zig +++ b/src/link.zig @@ -1997,8 +1997,8 @@ pub fn openObjectInput(diags: *Diags, path: Path) error{LinkFailure}!Input { } }; } -pub fn openArchiveInput(diags: *Diags, path: Path) error{LinkFailure}!Input { - return .{ .archive = openObject(path, false, false) catch |err| { +pub fn openArchiveInput(diags: *Diags, path: Path, must_link: bool, hidden: bool) error{LinkFailure}!Input { + return .{ .archive = openObject(path, must_link, hidden) catch |err| { return diags.failParse(path, "failed to open {}: {s}", .{ path, @errorName(err) }); } }; } diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 7182e0640f..1ffcabb1f5 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -447,15 +447,25 @@ pub fn flushModule(self: *MachO, arena: Allocator, tid: Zcu.PerThread.Id, prog_n }; for (system_libs.items) |lib| { - const dso_input = try link.openDsoInput(diags, lib.path, lib.needed, lib.weak, lib.reexport); - self.classifyInputFile(dso_input) catch |err| - diags.addParseError(lib.path, "failed to parse input file: {s}", .{@errorName(err)}); + switch (Compilation.classifyFileExt(lib.path.sub_path)) { + .shared_library => { + const dso_input = try link.openDsoInput(diags, lib.path, lib.needed, lib.weak, lib.reexport); + self.classifyInputFile(dso_input) catch |err| + diags.addParseError(lib.path, "failed to parse input file: {s}", .{@errorName(err)}); + }, + .static_library => { + const archive_input = try link.openArchiveInput(diags, lib.path, lib.must_link, lib.hidden); + self.classifyInputFile(archive_input) catch |err| + diags.addParseError(lib.path, "failed to parse input file: {s}", .{@errorName(err)}); + }, + else => unreachable, + } } // Finally, link against compiler_rt. if (comp.compiler_rt_lib) |crt_file| { const path = crt_file.full_object_path; - self.classifyInputFile(try link.openArchiveInput(diags, path)) catch |err| + self.classifyInputFile(try link.openArchiveInput(diags, path, false, false)) catch |err| diags.addParseError(path, "failed to parse archive: {s}", .{@errorName(err)}); } else if (comp.compiler_rt_obj) |crt_file| { const path = crt_file.full_object_path; |
