Consider this example program with an inline function "foo":

==> foo.h <==
extern int global;
__inline void foo() {
  ++global;
}
void bar();
==> pdb_comdat_main.c <==
#include "foo.h"
int main(void) {
  foo();
  bar();
  return 42;
}
==> pdb_comdat_bar.c <==
#include "foo.h"
void bar(void) {
  foo();
}

Both object files will contain debug info for foo, but only the debug info from
pdb_comdat_main.obj should be included in the PDB.

RUN: rm -rf %t && mkdir -p %t && cd %t
RUN: yaml2obj %S/Inputs/pdb_comdat_main.yaml -o pdb_comdat_main.obj
RUN: yaml2obj %S/Inputs/pdb_comdat_bar.yaml -o pdb_comdat_bar.obj
RUN: lld-link pdb_comdat_main.obj pdb_comdat_bar.obj -out:t.exe -debug -pdb:t.pdb -nodefaultlib -entry:main
RUN: llvm-pdbutil dump -l -symbols t.pdb | FileCheck %s

CHECK:                            Lines
CHECK: ============================================================
CHECK-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_main.obj`:
CHECK:       c:\src\llvm-project\build\pdb_comdat_main.c (MD5: F969E51BBE373436D81492EB61387F36)
CHECK:       c:\src\llvm-project\build\foo.h (MD5: D74D834EFAC3AE2B45E606A8320B1D5C)
CHECK-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_bar.obj`:
CHECK:       c:\src\llvm-project\build\pdb_comdat_bar.c (MD5: 365279DB4FCBEDD721BBFC3B14A953C2)
CHECK-NOT:       c:\src\llvm-project\build\foo.h
CHECK-LABEL:   Mod 0002 | `* Linker *`:

CHECK:                           Symbols
CHECK: ============================================================
CHECK-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_main.obj`:
CHECK:     4 | S_OBJNAME [size = 56] sig=0, `C:\src\llvm-project\build\pdb_comdat_main.obj`
CHECK:    60 | S_COMPILE3 [size = 60]
CHECK:         machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c
CHECK:         frontend = 19.0.24215.1, backend = 19.0.24215.1
CHECK:         flags = security checks | hot patchable
CHECK:   120 | S_GPROC32_ID [size = 44] `main`
CHECK:         parent = 0, end = 196, addr = 0002:0000, code size = 24
CHECK:         debug start = 4, debug end = 19, flags = none
CHECK:   164 | S_FRAMEPROC [size = 32]
CHECK:         size = 40, padding size = 0, offset to padding = 0
CHECK:         bytes of callee saved registers = 0, exception handler addr = 0000:0000
CHECK:         flags = has async eh | opt speed
CHECK:   196 | S_END [size = 4]
CHECK:   200 | S_GDATA32 [size = 24] `global`
CHECK:         type = 0x0074 (int), addr = 0000:0000
CHECK:   224 | S_BUILDINFO [size = 8] BuildId = `0x100A`
CHECK:   232 | S_GPROC32_ID [size = 44] `foo`
CHECK:         parent = 0, end = 308, addr = 0002:0032, code size = 15
CHECK:         debug start = 0, debug end = 14, flags = none
CHECK:   276 | S_FRAMEPROC [size = 32]
CHECK:         size = 0, padding size = 0, offset to padding = 0
CHECK:         bytes of callee saved registers = 0, exception handler addr = 0000:0000
CHECK:         flags = marked inline | has async eh | opt speed
CHECK:   308 | S_END [size = 4]
CHECK-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_bar.obj`:
CHECK:     4 | S_OBJNAME [size = 56] sig=0, `C:\src\llvm-project\build\pdb_comdat_bar.obj`
CHECK:    60 | S_COMPILE3 [size = 60]
CHECK:       machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c
CHECK:       frontend = 19.0.24215.1, backend = 19.0.24215.1
CHECK:       flags = security checks | hot patchable
CHECK:   120 | S_GPROC32_ID [size = 44] `bar`
CHECK:       parent = 0, end = 196, addr = 0002:0048, code size = 14
CHECK:       debug start = 4, debug end = 9, flags = none
CHECK:   164 | S_FRAMEPROC [size = 32]
CHECK:       size = 40, padding size = 0, offset to padding = 0
CHECK:       bytes of callee saved registers = 0, exception handler addr = 0000:0000
CHECK:       flags = has async eh | opt speed
CHECK:   196 | S_END [size = 4]
CHECK:   200 | S_GDATA32 [size = 24] `global`
CHECK:       type = 0x0074 (int), addr = 0000:0000
CHECK:   224 | S_BUILDINFO [size = 8] BuildId = `0x100D`
CHECK-NOT:   S_GPROC32_ID {{.*}} `foo`
CHECK-LABEL:   Mod 0002 | `* Linker *`:

Reorder the object files and verify that the other table is selected.

RUN: lld-link pdb_comdat_bar.obj pdb_comdat_main.obj -out:t.exe -debug -pdb:t.pdb -nodefaultlib -entry:main
RUN: llvm-pdbutil dump -l t.pdb | FileCheck %s --check-prefix=REORDER

REORDER-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_bar.obj`:
REORDER:       c:\src\llvm-project\build\pdb_comdat_bar.c (MD5: 365279DB4FCBEDD721BBFC3B14A953C2)
REORDER:       c:\src\llvm-project\build\foo.h (MD5: D74D834EFAC3AE2B45E606A8320B1D5C)
REORDER-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_main.obj`:
REORDER:       c:\src\llvm-project\build\pdb_comdat_main.c
REORDER-NOT:       c:\src\llvm-project\build\foo.h
REORDER-LABEL:   Mod 0002 | `* Linker *`:
