# RUN: yaml2obj %s -o %t.obj # RUN: lld-link /opt:icf /entry:foo /out:%t.exe /subsystem:console /include:bar \ # RUN: /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=ICF %s < %t.log # ICF: Selected foo # ICF: Removed bar # RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \ # RUN: /verbose /opt:noicf %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=NOICF %s < %t.log # RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \ # RUN: /verbose /opt:noref,noicf %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=NOICF %s < %t.log # ICF is on by default (no /opt: flags). # RUN: lld-link /entry:foo /out:%t.exe /subsystem:console \ # RUN: /include:bar /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=ICF %s < %t.log # /debug disables ICF. # RUN: lld-link /debug /entry:foo /out:%t.exe /subsystem:console \ # RUN: /include:bar /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=NOICF %s < %t.log # /profile disables ICF. # RUN: lld-link /profile /entry:foo /out:%t.exe /subsystem:console \ # RUN: /include:bar /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=NOICF %s < %t.log # /opt:noref disables ICF. # RUN: lld-link /opt:noref /entry:foo /out:%t.exe /subsystem:console \ # RUN: /include:bar /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=NOICF %s < %t.log # /debug /opt:ref enables ICF. # RUN: lld-link /debug /opt:ref /entry:foo /out:%t.exe /subsystem:console \ # RUN: /include:bar /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=ICF %s < %t.log # /debug /opt:noicf,ref disables ICF. # RUN: lld-link /debug /opt:noicf,ref /entry:foo /out:%t.exe /subsystem:console \ # RUN: /include:bar /verbose %t.obj > %t.log 2>&1 # RUN: FileCheck -check-prefix=NOICF %s < %t.log # NOICF-NOT: Removed foo # NOICF-NOT: Removed bar --- !COFF header: Machine: IMAGE_FILE_MACHINE_AMD64 Characteristics: [] sections: - Name: '.text$mn' Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] Alignment: 16 SectionData: 4883EC28E8000000004883C428C3 - Name: '.text$mn' Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] Alignment: 16 SectionData: 4883EC28E8000000004883C428C3 symbols: - Name: '.text$mn' Value: 0 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: Length: 14 NumberOfRelocations: 0 NumberOfLinenumbers: 0 CheckSum: 1682752513 Number: 0 Selection: IMAGE_COMDAT_SELECT_NODUPLICATES - Name: '.text$mn' Value: 0 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: Length: 14 NumberOfRelocations: 0 NumberOfLinenumbers: 0 CheckSum: 1682752513 Number: 0 Selection: IMAGE_COMDAT_SELECT_NODUPLICATES - Name: foo Value: 0 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: bar Value: 0 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL ...