From 8bec32477995f5a48fdb784bebe522015aedb036 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 15 Dec 2019 09:56:11 +0000 Subject: Fix Duplicate integer switch case values incorrectly consider its absolute value #502 (Hashing proc was wrong for big ints) --- src/exact_value.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/exact_value.cpp') diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 42b22c8ef..f4d2e60de 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -71,7 +71,12 @@ HashKey hash_exact_value(ExactValue v) { case ExactValue_String: return hash_string(v.value_string); case ExactValue_Integer: - return hashing_proc(big_int_ptr(&v.value_integer), v.value_integer.len * gb_size_of(u64)); + { + HashKey key = hashing_proc(big_int_ptr(&v.value_integer), v.value_integer.len * gb_size_of(u64)); + u8 last = (u8)v.value_integer.neg; + key.key = (key.key ^ last) * 0x100000001b3ll; + return key; + } case ExactValue_Float: return hash_f64(v.value_float); case ExactValue_Pointer: -- cgit v1.2.3