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) {...@@ -5361,7 +5361,7 @@ static uint32_t hash_const_val(ZigValue *const_val) {
5361 return result;5361 return result;
5362 }5362 }
5363 case ZigTypeIdEnumLiteral:5363 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;
5365 case ZigTypeIdEnum:5365 case ZigTypeIdEnum:
5366 {5366 {
5367 uint32_t result = 31643936;5367 uint32_t result = 31643936;
...@@ -5429,12 +5429,12 @@ static uint32_t hash_const_val(ZigValue *const_val) {...@@ -5429,12 +5429,12 @@ static uint32_t hash_const_val(ZigValue *const_val) {
5429 return 2709806591;5429 return 2709806591;
5430 case ZigTypeIdOptional:5430 case ZigTypeIdOptional:
5431 if (get_src_ptr_type(const_val->type) != nullptr) {5431 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;
5433 } else if (const_val->type->data.maybe.child_type->id == ZigTypeIdErrorSet) {5433 } 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;
5435 } else {5435 } else {
5436 if (const_val->data.x_optional) {5436 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;
5438 } else {5438 } else {
5439 return 4016830364;5439 return 4016830364;
5440 }5440 }