
# Test linking an OBJ with a reference to an out-of-date PDB type server
# RUN: cd %S/Inputs
# RUN: yaml2obj %s -o %t.obj
# RUN: lld-link %t.obj -out:%t.exe -debug -pdb:%t.pdb -nodefaultlib -entry:main 2>&1 | FileCheck %s
# RUN: lld-link %t.obj -out:%t.exe -debug:ghash -pdb:%t.pdb -nodefaultlib -entry:main 2>&1 | FileCheck %s
# RUN: cd %S

# CHECK: warning: Cannot use debug info for '{{.*}}.obj'
# CHECK-NEXT: The signature does not match; the file(s) might be out of date

# Also test linking an OBJ with a reference to *valid* PDB type server
# RUN: cd %S/Inputs
# RUN: yaml2obj %S/Inputs/pdb-type-server-valid-signature.yaml -o %t2.obj
# RUN: lld-link %t2.obj -out:%t2.exe -debug -pdb:%t2.pdb -nodefaultlib -entry:main 2>&1 | FileCheck %s -check-prefix=VALID-SIGNATURE -allow-empty
# RUN: cd %S

# VALID-SIGNATURE-NOT: warning: Cannot use debug info for '{{.*}}.obj'
# VALID-SIGNATURE-NOT: The signature does not match; the file(s) might be out of date

# Test an invalid path reference to a PDB type server; as a fallback LLD should try to load the PDB in the same path as the OBJ
# RUN: yaml2obj %S/Inputs/pdb-type-server-invalid-path.yaml -o %t3.obj
# RUN: cp %S/Inputs/pdb-diff-cl.pdb %T
# RUN: lld-link %t3.obj -out:%t3.exe -debug -pdb:%t3.pdb -nodefaultlib -entry:main 2>&1 | FileCheck -DMSG=%errc_ENOENT %s -check-prefix=INVALID-PATH -allow-empty

# INVALID-PATH-NOT: warning: Cannot use debug info for '{{.*}}3.obj' [LNK4099]
# INVALID-PATH-NOT: failed to load reference 'c:\some_invalid_path_AABB98765\pdb-diff-cl.pdb': [[MSG]]

--- !COFF
header:
  Machine:         IMAGE_FILE_MACHINE_AMD64
  Characteristics: [  ]
sections:
  - Name:            '.debug$S'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    Subsections:
      - !Symbols
        Records:
          - Kind:            S_GPROC32_ID
            ProcSym:
              CodeSize:        3
              DbgStart:        0
              DbgEnd:          2
              FunctionType:    4199
              Flags:           [  ]
              DisplayName:     main
          - Kind:            S_FRAMEPROC
            FrameProcSym:
              TotalFrameBytes: 0
              PaddingFrameBytes: 0
              OffsetToPadding: 0
              BytesOfCalleeSavedRegisters: 0
              OffsetOfExceptionHandler: 0
              SectionIdOfExceptionHandler: 0
              Flags:           [ AsynchronousExceptionHandling, OptimizedForSpeed ]
          - Kind:            S_PROC_ID_END
            ScopeEndSym:
      - !Lines
        CodeSize:        3
        Flags:           [  ]
        RelocOffset:     0
        RelocSegment:    0
        Blocks:
          - FileName:        'c:\src\llvm-project\build\t.c'
            Lines:
              - Offset:          0
                LineStart:       1
                IsStatement:     true
                EndDelta:        0
            Columns:
      - !FileChecksums
        Checksums:
          - FileName:        'c:\src\llvm-project\build\t.c'
            Kind:            MD5
            Checksum:        270A878DCC1B845655B162F56C4F5020
      - !StringTable
        Strings:
          - 'c:\src\llvm-project\build\t.c'
    Relocations:
      - VirtualAddress:  44
        SymbolName:      main
        Type:            IMAGE_REL_AMD64_SECREL
      - VirtualAddress:  48
        SymbolName:      main
        Type:            IMAGE_REL_AMD64_SECTION
      - VirtualAddress:  100
        SymbolName:      main
        Type:            IMAGE_REL_AMD64_SECREL
      - VirtualAddress:  104
        SymbolName:      main
        Type:            IMAGE_REL_AMD64_SECTION
  - Name:            '.debug$T'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    Types:
      - Kind:            LF_TYPESERVER2
        TypeServer2:
          Guid:            '{1B19DF01-BF22-426B-96CE-5258B8329FE5}'
          Age:             18
          Name:            'pdb-diff-cl.pdb'
  - Name:            '.text$mn'
    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
    Alignment:       16
    SectionData:     33C0C3
symbols:
  - Name:            '.debug$S'
    Value:           0
    SectionNumber:   1
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          328
      NumberOfRelocations: 4
      NumberOfLinenumbers: 0
      CheckSum:        0
      Number:          0
  - Name:            '.debug$T'
    Value:           0
    SectionNumber:   2
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          564
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        0
      Number:          0
  - Name:            '.text$mn'
    Value:           0
    SectionNumber:   3
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          3
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        4021952397
      Number:          0
  - Name:            main
    Value:           0
    SectionNumber:   3
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
...
