aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-12-03 20:35:23 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-01-15 15:11:35 -0800
commit9bf715de74a7d5badeae932afb594b7c6b33afa3 (patch)
tree302e2c5a42d30e379c5bb2e86c24360ea49ab3fb /src/link/Elf.zig
parent77accf597d845245847b143e42ec4109c9468480 (diff)
downloadzig-9bf715de74a7d5badeae932afb594b7c6b33afa3.tar.gz
zig-9bf715de74a7d5badeae932afb594b7c6b33afa3.zip
rework error handling in the backends
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 115c9f4550..7dd092782a 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -2368,12 +2368,25 @@ pub fn updateContainerType(
self: *Elf,
pt: Zcu.PerThread,
ty: InternPool.Index,
-) link.File.UpdateNavError!void {
+) link.File.UpdateContainerTypeError!void {
if (build_options.skip_non_native and builtin.object_format != .elf) {
@panic("Attempted to compile for object format that was disabled by build configuration");
}
if (self.llvm_object) |_| return;
- return self.zigObjectPtr().?.updateContainerType(pt, ty);
+ const zcu = pt.zcu;
+ const gpa = zcu.gpa;
+ return self.zigObjectPtr().?.updateContainerType(pt, ty) catch |err| switch (err) {
+ error.OutOfMemory => return error.OutOfMemory,
+ else => |e| {
+ try zcu.failed_types.putNoClobber(gpa, ty, try Zcu.ErrorMsg.create(
+ gpa,
+ zcu.typeSrcLoc(ty),
+ "failed to update container type: {s}",
+ .{@errorName(e)},
+ ));
+ return error.TypeFailureReported;
+ },
+ };
}
pub fn updateExports(