aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Hashimoto <mitchell.hashimoto@gmail.com>2022-02-27 19:13:52 -0800
committerAndrew Kelley <andrew@ziglang.org>2022-02-28 20:42:13 -0700
commit0eb3cb9e8cd263172fec797ed916aade3e5404f0 (patch)
treed9639a8320f0c65030f6c011834ad6695dfb38e2
parent6dae1de017f6d9e49fc99eb14c689180e08fb7fe (diff)
downloadzig-0eb3cb9e8cd263172fec797ed916aade3e5404f0.tar.gz
zig-0eb3cb9e8cd263172fec797ed916aade3e5404f0.zip
stage2: order of error set merging should match stage1
-rw-r--r--src/Sema.zig4
-rw-r--r--test/behavior/cast.zig24
2 files changed, 14 insertions, 14 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index e5cad45e90..e69d0829f1 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -17763,7 +17763,7 @@ fn resolvePeerTypes(
}
// Merge errors
- err_set_ty = try err_set_ty.?.errorSetMerge(sema.arena, candidate_ty);
+ err_set_ty = try candidate_ty.errorSetMerge(sema.arena, err_set_ty.?);
chosen = candidate;
chosen_i = candidate_i + 1;
continue;
@@ -17850,7 +17850,7 @@ fn resolvePeerTypes(
}
// Not a superset, create merged error set
- err_set_ty = try err_set_ty.?.errorSetMerge(sema.arena, eu_set_ty);
+ err_set_ty = try eu_set_ty.errorSetMerge(sema.arena, err_set_ty.?);
chosen = candidate;
chosen_i = candidate_i + 1;
continue;
diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig
index af2eef03f1..9ecfaa5edb 100644
--- a/test/behavior/cast.zig
+++ b/test/behavior/cast.zig
@@ -669,16 +669,16 @@ test "peer type resolution: disjoint error sets" {
const a: error{ One, Two } = undefined;
const b: error{Three} = undefined;
- // note: order of error set members doesn't member, may want to sort
+ // note: order of error set made to match stage1 during stage2 dev
{
const ty = @TypeOf(a, b);
const error_set_info = @typeInfo(ty);
try expect(error_set_info == .ErrorSet);
try expect(error_set_info.ErrorSet.?.len == 3);
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[0].name, "One"));
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[1].name, "Two"));
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[2].name, "Three"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[0].name, "Three"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[1].name, "One"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[2].name, "Two"));
}
{
@@ -686,9 +686,9 @@ test "peer type resolution: disjoint error sets" {
const error_set_info = @typeInfo(ty);
try expect(error_set_info == .ErrorSet);
try expect(error_set_info.ErrorSet.?.len == 3);
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[0].name, "Three"));
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[1].name, "One"));
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[2].name, "Two"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[0].name, "One"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[1].name, "Two"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[2].name, "Three"));
}
}
@@ -701,7 +701,7 @@ test "peer type resolution: error union and error set" {
const a: error{Three} = undefined;
const b: error{ One, Two }!u32 = undefined;
- // note: order of error set members doesn't member, may want to sort
+ // note: order of error set made to match stage1 during stage2 dev
{
const ty = @TypeOf(a, b);
@@ -710,9 +710,9 @@ test "peer type resolution: error union and error set" {
const error_set_info = @typeInfo(info.ErrorUnion.error_set);
try expect(error_set_info.ErrorSet.?.len == 3);
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[0].name, "Three"));
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[1].name, "One"));
- try expect(mem.eql(u8, error_set_info.ErrorSet.?[2].name, "Two"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[0].name, "One"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[1].name, "Two"));
+ try expect(mem.eql(u8, error_set_info.ErrorSet.?[2].name, "Three"));
}
{
@@ -737,7 +737,7 @@ test "peer type resolution: error union after non-error" {
const a: u32 = undefined;
const b: error{ One, Two }!u32 = undefined;
- // note: order of error set members doesn't member, may want to sort
+ // note: order of error set made to match stage1 during stage2 dev
{
const ty = @TypeOf(a, b);