diff --git a/lld/COFF/ICF.cpp b/lld/COFF/ICF.cpp index 84709de2a6f0..88e67443c26b 100644 --- a/lld/COFF/ICF.cpp +++ b/lld/COFF/ICF.cpp @@ -271,7 +271,7 @@ void ICF::run(ArrayRef Vec) { uint32_t Hash = SC->Class[1]; for (Symbol *B : SC->symbols()) if (auto *Sym = dyn_cast_or_null(B)) - Hash ^= Sym->getChunk()->Class[1]; + Hash += Sym->getChunk()->Class[1]; // Set MSB to 1 to avoid collisions with non-hash classs. SC->Class[0] = Hash | (1U << 31); }); diff --git a/lld/ELF/ICF.cpp b/lld/ELF/ICF.cpp index 14dbd4e122c8..3f326fa337b7 100644 --- a/lld/ELF/ICF.cpp +++ b/lld/ELF/ICF.cpp @@ -431,7 +431,7 @@ static void combineRelocHashes(InputSection *IS, ArrayRef Rels) { Symbol &S = IS->template getFile()->getRelocTargetSym(Rel); if (auto *D = dyn_cast(&S)) if (auto *RelSec = dyn_cast_or_null(D->Section)) - Hash ^= RelSec->Class[1]; + Hash += RelSec->Class[1]; } // Set MSB to 1 to avoid collisions with non-hash IDs. IS->Class[0] = Hash | (1U << 31);