size_t varying across platforms can cause issues, for example mismatching
hashes when cross-compiling modules from a 64bit target to a 32bit target.
Although the comments note that hash_code values "are not stable to save or
persist", it is effectively used in such cases today, for example for implicit
Since hashing mechanisms in practice already use uint64_t for computations,
use uint64_t instead of size_t to store the value of hash_code.
This is similar to earlier changes in c0445098519defc4bd13624095fac92977c9cfe4.