diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-03-11 19:31:29 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-11 19:38:07 -0700 |
| commit | 55ba335e0ffc2af76bf0743d98f5a959ccce0409 (patch) | |
| tree | f9f705b5f33d0d54c52cdee9e38e40424ab9fd52 /test/behavior/error.zig | |
| parent | 2ee3cc453c4cefa3519f6a6238d4721364d829ae (diff) | |
| download | zig-55ba335e0ffc2af76bf0743d98f5a959ccce0409.tar.gz zig-55ba335e0ffc2af76bf0743d98f5a959ccce0409.zip | |
Sema: fix resolution of inferred error sets
Introduce `Module.ensureFuncBodyAnalyzed` and corresponding `Sema`
function. This mirrors `ensureDeclAnalyzed` except also waits until the
function body has been semantically analyzed, meaning that inferred
error sets will have been populated.
Resolving error sets can now emit a "unable to resolve inferred error
set" error instead of producing an incorrect error set type. Resolving
error sets now calls `ensureFuncBodyAnalyzed`. Closes #11046.
`coerceInMemoryAllowedErrorSets` now does a lot more work to avoid
resolving an inferred error set if possible. Same with
`wrapErrorUnionSet`.
Inferred error set types no longer check the `func` field to determine if
they are equal. That was incorrect because an inline or comptime function
call produces a unique error set which has the same `*Module.Fn` value for
this field. Instead we use the `*Module.Fn.InferredErrorSet` pointers to
test equality of inferred error sets.
Diffstat (limited to 'test/behavior/error.zig')
| -rw-r--r-- | test/behavior/error.zig | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/test/behavior/error.zig b/test/behavior/error.zig index 0a55b34121..b3503051fb 100644 --- a/test/behavior/error.zig +++ b/test/behavior/error.zig @@ -476,7 +476,11 @@ test "function pointer with return type that is error union with payload which i } test "return result loc as peer result loc in inferred error set function" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO const S = struct { fn doTheTest() !void { |
