Index: ELF/ICF.cpp =================================================================== --- ELF/ICF.cpp +++ ELF/ICF.cpp @@ -302,7 +302,12 @@ // the same group are consecutive in the vector. std::stable_sort(V.begin(), V.end(), [](InputSection *A, InputSection *B) { - return A->GroupId < B->GroupId; + if (A->GroupId != B->GroupId) + return A->GroupId < B->GroupId; + else + // Within a group, put the highest alignment + // requirement first, so that's the one we'll keep. + return B->Alignment < A->Alignment; }); // Compare static contents and assign unique IDs for each static content. Index: test/ELF/icf7.s =================================================================== --- test/ELF/icf7.s +++ test/ELF/icf7.s @@ -4,8 +4,8 @@ # RUN: ld.lld %t -o %t2 --icf=all --verbose | FileCheck %s # RUN: llvm-objdump -t %t2 | FileCheck -check-prefix=ALIGN %s -# CHECK: selected .text.f1 -# CHECK: removed .text.f2 +# CHECK: selected .text.f2 +# CHECK: removed .text.f1 # ALIGN: 0000000000011000 .text 00000000 _start # ALIGN: 0000000000011100 .text 00000000 f1