llvm/lld/test/COFF/pdb-source-lines.test

Test the linker line tables on roughly the following example:

==> foo.h <==
void bar(void);
inline void foo(void) {
  bar();
}
==> pdb_lines_1.c <==
#include "foo.h"
int main(void) {
  foo();
  return 42;
}
==> pdb_lines_2.c <==
void bar(void) {
}

$ cl -c -Z7 pdb_lines*.c

RUN: yaml2obj %S/Inputs/pdb_lines_1.yaml -o %t.pdb_lines_1.obj
RUN: yaml2obj %S/Inputs/pdb_lines_2.yaml -o %t.pdb_lines_2.obj
RUN: rm -f %t.exe %t.pdb
RUN: lld-link -debug -entry:main -nodefaultlib -out:%t.exe -pdb:%t.pdb %t.pdb_lines_1.obj %t.pdb_lines_2.obj
RUN: llvm-pdbutil pdb2yaml -modules -module-files -subsections=lines,fc %t.pdb | FileCheck %s

CHECK-LABEL: DbiStream:
CHECK-NEXT:   VerHeader:       V70
CHECK-NEXT:   Age:             1
CHECK-NEXT:   BuildNumber:     36363
CHECK-NEXT:   PdbDllVersion:   0
CHECK-NEXT:   PdbDllRbld:      0
CHECK-NEXT:   Flags:           0
CHECK-NEXT:   MachineType:     Amd64
CHECK-NEXT:   Modules:

CHECK-LABEL:    - Module:          {{.*}}pdb_lines_1.obj
CHECK-NEXT:       ObjFile:         {{.*}}pdb_lines_1.obj
CHECK-NEXT:       SourceFiles:
CHECK-NEXT:         - '{{.*}}pdb_lines_1.c'
CHECK-NEXT:         - '{{.*}}foo.h'
CHECK-NEXT:       Subsections:
CHECK-NEXT:         - !Lines
CHECK-NEXT:           CodeSize:        19
CHECK-NEXT:           Flags:           [  ]
CHECK-NEXT:           RelocOffset:     0
CHECK-NEXT:           RelocSegment:    1
CHECK-NEXT:           Blocks:
CHECK-NEXT:             - FileName:        '{{.*}}pdb_lines_1.c'
CHECK-NEXT:               Lines:
CHECK-NEXT:                 - Offset:          0
CHECK-NEXT:                   LineStart:       2
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:                 - Offset:          4
CHECK-NEXT:                   LineStart:       3
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:                 - Offset:          9
CHECK-NEXT:                   LineStart:       4
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:                 - Offset:          14
CHECK-NEXT:                   LineStart:       5
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:               Columns:
CHECK-NEXT:         - !Lines
CHECK-NEXT:           CodeSize:        14
CHECK-NEXT:           Flags:           [  ]
CHECK-NEXT:           RelocOffset:     32
CHECK-NEXT:           RelocSegment:    1
CHECK-NEXT:           Blocks:
CHECK-NEXT:             - FileName:        '{{.*}}foo.h'
CHECK-NEXT:               Lines:
CHECK-NEXT:                 - Offset:          0
CHECK-NEXT:                   LineStart:       2
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:                 - Offset:          4
CHECK-NEXT:                   LineStart:       3
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:                 - Offset:          9
CHECK-NEXT:                   LineStart:       4
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:               Columns:
CHECK-NEXT:         - !FileChecksums
CHECK-NEXT:           Checksums:
CHECK-NEXT:             - FileName:        '{{.*}}pdb_lines_1.c'
CHECK-NEXT:               Kind:            MD5
CHECK-NEXT:               Checksum:        4EB19DCD86C3BA2238A255C718572E7B
CHECK-NEXT:             - FileName:        '{{.*}}foo.h'
CHECK-NEXT:               Kind:            MD5
CHECK-NEXT:               Checksum:        061EB73ABB642532857A4F1D9CBAC323

CHECK-LABEL:    - Module:          {{.*}}pdb_lines_2.obj
CHECK-NEXT:       ObjFile:         {{.*}}pdb_lines_2.obj
CHECK-NEXT:       SourceFiles:
CHECK-NEXT:         - '{{.*}}pdb_lines_2.c'
CHECK-NEXT:       Subsections:
CHECK-NEXT:         - !Lines
CHECK-NEXT:           CodeSize:        1
CHECK-NEXT:           Flags:           [  ]
CHECK-NEXT:           RelocOffset:     48
CHECK-NEXT:           RelocSegment:    1
CHECK-NEXT:           Blocks:
CHECK-NEXT:             - FileName:        '{{.*}}pdb_lines_2.c'
CHECK-NEXT:               Lines:
CHECK-NEXT:                 - Offset:          0
CHECK-NEXT:                   LineStart:       1
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:                 - Offset:          0
CHECK-NEXT:                   LineStart:       2
CHECK-NEXT:                   IsStatement:     true
CHECK-NEXT:                   EndDelta:        0
CHECK-NEXT:               Columns:
CHECK-NEXT:         - !FileChecksums
CHECK-NEXT:           Checksums:
CHECK-NEXT:             - FileName:        '{{.*}}pdb_lines_2.c'
CHECK-NEXT:               Kind:            MD5
CHECK-NEXT:               Checksum:        DF91CB3A2B8D917486574BB50CAC4CC7
CHECK-NEXT:     - Module:          '* Linker *'
CHECK-NEXT:       ObjFile:         ''