diff --git a/src/Sema.zig b/src/Sema.zig index e5cad45e906b3c1dc15dbae6f4119a082db5f824..e69d0829f14db68cece32fe1ab012f6324af0d8f 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 af2eef03f1cc6daf68c296d41803078dfb209be5..9ecfaa5edbc038f447e95a38e33fa7493a78fab5 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -669,27 +669,27 @@ 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")); - } - - { - const ty = @TypeOf(b, a); - 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")); } + + { + const ty = @TypeOf(b, a); + 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")); + } } test "peer type resolution: error union and error set" { @@ -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);