Replicate this scenario:

$ cat a.c
struct Foo { int x; };
int g(struct Foo *p);
int main() {
  struct Foo f = {42};
  return g(&f);
}

$ cat b.c
struct Foo { int x; };
int g(struct Foo *p) { return p->x; }

$ cl -c a.c b.c -Zi -Fdts.pdb

$ lld-link a.obj b.obj -debug -entry:main -nodefaultlib -out:t.exe

RUN: rm -rf %t && mkdir -p %t && cd %t
RUN: yaml2obj %S/Inputs/pdb-type-server-simple-a.yaml -o a.obj
RUN: yaml2obj %S/Inputs/pdb-type-server-simple-b.yaml -o b.obj
RUN: llvm-pdbutil yaml2pdb %S/Inputs/pdb-type-server-simple-ts.yaml -pdb ts.pdb
RUN: lld-link a.obj b.obj -entry:main -debug -out:t.exe -pdb:t.pdb -nodefaultlib
RUN: llvm-pdbutil dump -symbols -types -ids -globals %t/t.pdb | FileCheck %s


CHECK-LABEL: Types (TPI Stream)
CHECK: ============================================================

CHECK:   [[FOO_DECL:[^ ]*]] | LF_STRUCTURE [size = 36] `Foo`

CHECK:   [[FOO_PTR:[^ ]*]] | LF_POINTER [size = 12]
CHECK-NEXT:            referent = [[FOO_DECL]]

CHECK:   [[G_ARGS:[^ ]*]] | LF_ARGLIST [size = 12]
CHECK-NEXT:            [[FOO_PTR]]: `Foo*`

CHECK:   [[G_PROTO:[^ ]*]] | LF_PROCEDURE [size = 16]
CHECK-NEXT:       return type = 0x0074 (int), # args = 1, param list = [[G_ARGS]]
CHECK-NEXT:       calling conv = cdecl, options = None

CHECK:   [[FOO_COMPLETE:[^ ]*]] | LF_STRUCTURE [size = 36] `Foo`
CHECK-NEXT:       unique name: `.?AUFoo@@`
CHECK-NEXT:       vtable: <no type>, base list: <no type>, field list: 0x{{.*}}
CHECK:            options: has unique name
CHECK:   [[MAIN_PROTO:[^ ]*]] | LF_PROCEDURE [size = 16]
CHECK:            return type = 0x0074 (int), # args = 0, param list = 0x{{.*}}
CHECK:            calling conv = cdecl, options = None


CHECK-LABEL:                      Types (IPI Stream)
CHECK: ============================================================
CHECK:   [[MAIN_ID:[^ ]*]] | LF_FUNC_ID [size = 20]
CHECK:            name = main, type = [[MAIN_PROTO]], parent scope = <no type>
CHECK:   [[G_ID:[^ ]*]] | LF_FUNC_ID [size = 16]
CHECK:            name = g, type = [[G_PROTO]], parent scope = <no type>
CHECK:   [[A_BUILD:[^ ]*]] | LF_BUILDINFO [size = 28]
CHECK:            {{.*}}: `a.c`
CHECK:   [[B_BUILD:[^ ]*]] | LF_BUILDINFO [size = 28]
CHECK:            {{.*}}: `b.c`

CHECK-LABEL:                       Global Symbols
CHECK:       ============================================================
CHECK-NEXT:    Records
CHECK-NEXT:        36 | S_PROCREF [size = 20] `main`
CHECK-NEXT:             module = 1, sum name = 0, offset = 104
CHECK-NEXT:        56 | S_PROCREF [size = 16] `g`
CHECK-NEXT:             module = 2, sum name = 0, offset = 104

CHECK-LABEL:                           Symbols
CHECK: ============================================================
CHECK-LABEL:   Mod 0000 | `{{.*}}a.obj`:
CHECK:        4 | S_OBJNAME [size = 40] sig=0, `C:\src\llvm-project\build\a.obj`
CHECK:      104 | S_GPROC32 [size = 44] `main`
CHECK:            parent = 0, end = 196, addr = 0001:0000, code size = 27
CHECK:            type = {{.*}}, debug start = 4, debug end = 22, flags = none
CHECK:      200 | S_BUILDINFO [size = 8] BuildId = `[[A_BUILD]]`
CHECK-LABEL:   Mod 0001 | `{{.*}}b.obj`:
CHECK:        4 | S_OBJNAME [size = 40] sig=0, `C:\src\llvm-project\build\b.obj`
CHECK:       44 | 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:      104 | S_GPROC32 [size = 44] `g`
CHECK:            parent = 0, end = 196, addr = 0001:0032, code size = 13
CHECK:            type = {{.*}}, debug start = 5, debug end = 12, flags = none
CHECK:      148 | 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 = has async eh | opt speed
CHECK:      180 | S_REGREL32 [size = 16] `p`
CHECK:            type = [[FOO_PTR]] (Foo*), register = CVRegRSP, offset = 8
CHECK:      196 | S_END [size = 4]
CHECK:      200 | S_BUILDINFO [size = 8] BuildId = `[[B_BUILD]]`
CHECK-LABEL:   Mod 0002 | `* Linker *`:
