authorgravatar for timonkruiper@gmail.comTimon Kruiper <timonkruiper@gmail.com> 2020-04-02 21:32:38+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-04-02 17:51:04-04:00
logb5526d0b3bb0329ed9ba614d45a1b711b118c315
tree3fab1813353ff4d47326321d376062fe3c7fbc89
parent5314641e117f3b3d9cef2db527af532ddf18ccfc

Fix multiplication overflow in `hash_const_val`

In some cases the compiler was actually emitting an 64 bit signed multiplication, instead of a 32 bit unsigned one.

1 files changed, 4 insertions(+), 4 deletions(-)

src/analyze.cpp+4-4
......@@ -5361,7 +5361,7 @@ static uint32_t hash_const_val(ZigValue *const_val) {
53615361 return result;
53625362 }
53635363 case ZigTypeIdEnumLiteral:
5364 return buf_hash(const_val->data.x_enum_literal) * 2691276464;
5364 return buf_hash(const_val->data.x_enum_literal) * (uint32_t)2691276464;
53655365 case ZigTypeIdEnum:
53665366 {
53675367 uint32_t result = 31643936;
......@@ -5429,12 +5429,12 @@ static uint32_t hash_const_val(ZigValue *const_val) {
54295429 return 2709806591;
54305430 case ZigTypeIdOptional:
54315431 if (get_src_ptr_type(const_val->type) != nullptr) {
5432 return hash_const_val_ptr(const_val) * 1992916303;
5432 return hash_const_val_ptr(const_val) * (uint32_t)1992916303;
54335433 } else if (const_val->type->data.maybe.child_type->id == ZigTypeIdErrorSet) {
5434 return hash_const_val_error_set(const_val) * 3147031929;
5434 return hash_const_val_error_set(const_val) * (uint32_t)3147031929;
54355435 } else {
54365436 if (const_val->data.x_optional) {
5437 return hash_const_val(const_val->data.x_optional) * 1992916303;
5437 return hash_const_val(const_val->data.x_optional) * (uint32_t)1992916303;
54385438 } else {
54395439 return 4016830364;
54405440 }