zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 6229d37dcfec393880109c7aaed1c18d08756631 (tree)
parent c0ae9647f9656ea47c49ffd64443b7da73aeffc7
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Tue, 28 Dec 2021 18:01:40 -0700

stage2: handle function dependency failures without crashing

Diffstat:
Msrc/Compilation.zig | 7++++++-
Msrc/value.zig | 2++
2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/Compilation.zig b/src/Compilation.zig @@ -2350,7 +2350,12 @@ fn processOneJob(comp: *Compilation, job: Job, main_progress_node: *std.Progress var air = module.analyzeFnBody(decl, func, sema_arena) catch |err| switch (err) { error.AnalysisFail => { - assert(func.state != .in_progress); + if (func.state == .in_progress) { + // If this decl caused the compile error, the analysis field would + // be changed to indicate it was this Decl's fault. Because this + // did not happen, we infer here that it was a dependency failure. + func.state = .dependency_failure; + } return; }, error.OutOfMemory => return error.OutOfMemory, diff --git a/src/value.zig b/src/value.zig @@ -1543,6 +1543,8 @@ pub const Value = extern union { hash(slice.len, Type.usize, hasher); }, + // For these, hash them as hash of a pointer to the decl, + // combined with a hash of the byte offset from the decl. .elem_ptr => @panic("TODO: Implement more pointer hashing cases"), .field_ptr => @panic("TODO: Implement more pointer hashing cases"), .eu_payload_ptr => @panic("TODO: Implement more pointer hashing cases"),