| # RUN: yaml2obj < %s > %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 |
| ... |