Author: kremenek Date: Mon Jan 21 16:50:37 2008 New Revision: 46227 URL: http://llvm.org/viewvc/llvm-project?rev=46227&view=rev Log: Adjusted ImutAVLTree::ComputeHash to compute a hash value that is based on a clearer sequence of hashing compositions.
Modified: llvm/trunk/include/llvm/ADT/ImmutableSet.h Modified: llvm/trunk/include/llvm/ADT/ImmutableSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ImmutableSet.h?rev=46227&r1=46226&r2=46227&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/ImmutableSet.h (original) +++ llvm/trunk/include/llvm/ADT/ImmutableSet.h Mon Jan 21 16:50:37 2008 @@ -210,11 +210,24 @@ unsigned ComputeHash(ImutAVLTree* L, ImutAVLTree* R, value_type_ref V) { FoldingSetNodeID ID; - ID.AddInteger(L ? L->ComputeHash() : 0); + if (L) ID.AddInteger(L->ComputeHash()); ImutInfo::Profile(ID,V); - ID.AddInteger(R ? R->ComputeHash() : 0); - return ID.ComputeHash(); + // Compute the "intermediate" hash. Basically, we want the net profile to + // be: H(H(....H(H(H(item0),item1),item2)...),itemN), where + // H(item) is the hash of the data item and H(hash,item) is a hash + // of the last item hash and the the next item. + + unsigned X = ID.ComputeHash(); + ID.clear(); + + if (R) { + ID.AddInteger(X); + ID.AddInteger(R->ComputeHash()); + X = ID.ComputeHash(); + } + + return X; } inline unsigned ComputeHash() { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits