authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-31 12:17:48-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-31 12:17:48-07:00
log282437c7538e3e70ce06cfee7affe976de28a780
tree3d04a4c1f6949c567816d7484fe09572ab0c657c
parent56608cbb3d5577d8931830fa02d3e2920925ceab

stage2: fix hash/eql on function types

to account for generic callconv and generic alignment.

1 files changed, 10 insertions(+), 6 deletions(-)

src/type.zig+10-6
...@@ -640,16 +640,16 @@ pub const Type = extern union {...@@ -640,16 +640,16 @@ pub const Type = extern union {
640 if (!eql(a_info.return_type, b_info.return_type, mod))640 if (!eql(a_info.return_type, b_info.return_type, mod))
641 return false;641 return false;
642642
643 if (a_info.cc != b_info.cc)643 if (a_info.is_var_args != b_info.is_var_args)
644 return false;644 return false;
645645
646 if (a_info.alignment != b_info.alignment)646 if (a_info.is_generic != b_info.is_generic)
647 return false;647 return false;
648648
649 if (a_info.is_var_args != b_info.is_var_args)649 if (!a_info.cc_is_generic and a_info.cc != b_info.cc)
650 return false;650 return false;
651651
652 if (a_info.is_generic != b_info.is_generic)652 if (!a_info.align_is_generic and a_info.alignment != b_info.alignment)
653 return false;653 return false;
654654
655 if (a_info.param_types.len != b_info.param_types.len)655 if (a_info.param_types.len != b_info.param_types.len)
...@@ -1039,8 +1039,12 @@ pub const Type = extern union {...@@ -1039,8 +1039,12 @@ pub const Type = extern union {
1039 if (fn_info.return_type.tag() != .generic_poison) {1039 if (fn_info.return_type.tag() != .generic_poison) {
1040 hashWithHasher(fn_info.return_type, hasher, mod);1040 hashWithHasher(fn_info.return_type, hasher, mod);
1041 }1041 }
1042 std.hash.autoHash(hasher, fn_info.alignment);1042 if (!fn_info.align_is_generic) {
1043 std.hash.autoHash(hasher, fn_info.cc);1043 std.hash.autoHash(hasher, fn_info.alignment);
1044 }
1045 if (!fn_info.cc_is_generic) {
1046 std.hash.autoHash(hasher, fn_info.cc);
1047 }
1044 std.hash.autoHash(hasher, fn_info.is_var_args);1048 std.hash.autoHash(hasher, fn_info.is_var_args);
1045 std.hash.autoHash(hasher, fn_info.is_generic);1049 std.hash.autoHash(hasher, fn_info.is_generic);
10461050