From 0eb3cb9e8cd263172fec797ed916aade3e5404f0 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 27 Feb 2022 19:13:52 -0800 Subject: [PATCH] stage2: order of error set merging should match stage1 --- src/Sema.zig | 4 ++-- test/behavior/cast.zig | 24 ++++++++++++------------ 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);