arames added a comment.

In D102943#2775131 <https://reviews.llvm.org/D102943#2775131>, @dexonsmith 
wrote:

> In D102943#2775115 <https://reviews.llvm.org/D102943#2775115>, @pcc wrote:
>
>> Isn't the bug here that module hashing is using `hash_code`? So shouldn't 
>> the correct fix be to use a specific hashing algorithm for module hashes?
>
> Yeah, I tend to agree. I thought modules already used MD5, but maybe just for 
> the AST signature.

For reference, the issue I am trying to fix stems from the hash computed as 
part of CompilerInvocation::getModuleHash() 
<https://github.com/llvm/llvm-project/blob/main/clang/lib/Frontend/CompilerInvocation.cpp#L4464>.

Reading the doc around `llvm::hash_code`, my first reaction was indeed that 
modules may have to use a different hash.
I thought the current proposal was something to consider, because:

1. Practically, everything is done on `uint64_t`, so I would expect switching 
from `size_t` to `uint64_t` to have little to no impact on non-64bit targets.
2. The current modules code kind of already assumes `hash_code` is stable over 
different executions. Plain simple use-case with implicit modules would be 
severely deficient if the hash was not stable across executions. To be fair, 
the assumption is different from the one I am trying to fix of 32bit vs 64bit.

Alternatively, we could introduce something along the lines of 
`llvm::stable_hash_code` (other name suggestions welcome).
We can probably restructure the code with very few changes. (Really, it looks 
like we only need a configurable storage type, and allow skipping the execution 
seed part.)

Would you think this is a better approach ? Or do you have something else to 
suggest ?

Cheers


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D102943/new/

https://reviews.llvm.org/D102943

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to