diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2022-11-03 02:42:18 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-11-04 00:00:10 -0400 |
| commit | cbed6bb08555222008e87cfb071adeed97b3f8a4 (patch) | |
| tree | e5824a89f3f037909cfceae8fee7b8bfc765af70 /src | |
| parent | 42755a1944f4c4a60fc7e5e66cf76e9cbdf1ce84 (diff) | |
| download | zig-cbed6bb08555222008e87cfb071adeed97b3f8a4.tar.gz zig-cbed6bb08555222008e87cfb071adeed97b3f8a4.zip | |
Sema: make `InferredErrorSet` deterministic
Empirically, this `AutoHashMapUnmanaged` -> `AutoArrayHashMapUnmanaged`
change fixes all non-determinism in `ReleaseFast` build artifacts.
Closes #12183
Diffstat (limited to 'src')
| -rw-r--r-- | src/Module.zig | 2 | ||||
| -rw-r--r-- | src/Sema.zig | 8 |
2 files changed, 3 insertions, 7 deletions
diff --git a/src/Module.zig b/src/Module.zig index 2bda1707b2..6ef5389360 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -1578,7 +1578,7 @@ pub const Fn = struct { errors: ErrorSet.NameMap = .{}, /// Other inferred error sets which this inferred error set should include. - inferred_error_sets: std.AutoHashMapUnmanaged(*InferredErrorSet, void) = .{}, + inferred_error_sets: std.AutoArrayHashMapUnmanaged(*InferredErrorSet, void) = .{}, /// Whether the function returned anyerror. This is true if either of /// the dependent functions returns anyerror. diff --git a/src/Sema.zig b/src/Sema.zig index b2a0dfa779..bd956d32bc 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -27509,9 +27509,7 @@ fn analyzeIsNonErrComptimeOnly( // Try to avoid resolving inferred error set if possible. if (ies.errors.count() != 0) break :blk; if (ies.is_anyerror) break :blk; - var it = ies.inferred_error_sets.keyIterator(); - while (it.next()) |other_error_set_ptr| { - const other_ies: *Module.Fn.InferredErrorSet = other_error_set_ptr.*; + for (ies.inferred_error_sets.keys()) |other_ies| { if (ies == other_ies) continue; try sema.resolveInferredErrorSet(block, src, other_ies); if (other_ies.is_anyerror) { @@ -29432,9 +29430,7 @@ fn resolveInferredErrorSet( ies.is_resolved = true; - var it = ies.inferred_error_sets.keyIterator(); - while (it.next()) |other_error_set_ptr| { - const other_ies: *Module.Fn.InferredErrorSet = other_error_set_ptr.*; + for (ies.inferred_error_sets.keys()) |other_ies| { if (ies == other_ies) continue; try sema.resolveInferredErrorSet(block, src, other_ies); |
