Index: COFF/Chunks.cpp =================================================================== --- COFF/Chunks.cpp +++ COFF/Chunks.cpp @@ -438,6 +438,7 @@ } void SectionChunk::replace(SectionChunk *Other) { + Alignment = std::max(Alignment, Other->Alignment); Other->Repl = Repl; Other->Live = false; } Index: COFF/ICF.cpp =================================================================== --- COFF/ICF.cpp +++ COFF/ICF.cpp @@ -67,8 +67,8 @@ // Returns a hash value for S. uint32_t ICF::getHash(SectionChunk *C) { - return hash_combine(C->getOutputCharacteristics(), C->SectionName, C->Relocs.size(), - C->Alignment, uint32_t(C->Header->SizeOfRawData), + return hash_combine(C->getOutputCharacteristics(), C->SectionName, + C->Relocs.size(), uint32_t(C->Header->SizeOfRawData), C->Checksum, C->getContents()); } @@ -168,7 +168,7 @@ // Compare section attributes and contents. return A->getOutputCharacteristics() == B->getOutputCharacteristics() && - A->SectionName == B->SectionName && A->Alignment == B->Alignment && + A->SectionName == B->SectionName && A->Header->SizeOfRawData == B->Header->SizeOfRawData && A->Checksum == B->Checksum && A->getContents() == B->getContents() && assocEquals(A, B); Index: test/COFF/icf-different-align.test =================================================================== --- test/COFF/icf-different-align.test +++ test/COFF/icf-different-align.test @@ -2,9 +2,14 @@ # RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \ # RUN: /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck %s < %t.log +# RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=OBJDUMP %s -# CHECK-NOT: Selected foo -# CHECK-NOT: Removed bar +# CHECK: Selected foo +# CHECK: Removed bar + +# OBJDUMP: Contents of section .text: +# OBJDUMP-NEXT: 140001000 00cccccc cccccccc cccccccc cccccccc +# OBJDUMP-NEXT: 140001010 4883ec28 e8000000 004883c4 28c3 --- !COFF header: @@ -19,6 +24,10 @@ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] Alignment: 16 SectionData: 4883EC28E8000000004883C428C3 + - Name: '.text' + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 00 symbols: - Name: '.text$mn' Value: 0