Consider this program:

$ cat a.c
void g(int x) {}
void f(int x);
int main(int argc) {
  if (argc) {
    int x = 42;
    f(x);
  } else {
    int y = 13;
    f(y);
  }
}

$ cat b.c
extern void g();
void f(int x) {
  if (x) {
    int y = x + 3;
    g(y);
  } else {
    int w = x + 4;
    g(w);
  }
}

This program is interesting because there are two TUs, and each TU has nested
scopes. Make sure we get the right parent and end offsets.

RUN: yaml2obj %S/Inputs/pdb-scopes-a.yaml -o %t-a.obj
RUN: yaml2obj %S/Inputs/pdb-scopes-b.yaml -o %t-b.obj
RUN: lld-link %t-a.obj %t-b.obj -debug -entry:main -nodefaultlib -out:%t.exe -pdb:%t.pdb
RUN: llvm-pdbutil dump -symbols %t.pdb | FileCheck %s

CHECK-LABEL: Mod 0000 | `{{.*}}pdb-scopes.test.tmp-a.obj`:
CHECK: 104 | S_GPROC32 [size = 44] `g`
CHECK:       parent = 0, end = 196, addr = 0001:0000, code size = 5
CHECK:       debug start = 4, debug end = 4, flags = none
CHECK: 180 | S_REGREL32 [size = 16] `x`
CHECK: 196 | S_END [size = 4]
CHECK: 200 | S_GPROC32 [size = 44] `main`
CHECK:       parent = 0, end = 384, addr = 0001:0016, code size = 58
CHECK:       debug start = 8, debug end = 53, flags = none
CHECK: 276 | S_REGREL32 [size = 20] `argc`
CHECK: 296 | S_BLOCK32 [size = 24] ``
CHECK:       parent = 200, end = 336
CHECK:       code size = 17, addr = 0001:0031
CHECK: 320 | S_REGREL32 [size = 16] `x`
CHECK: 336 | S_END [size = 4]
CHECK: 340 | S_BLOCK32 [size = 24] ``
CHECK:       parent = 200, end = 380
CHECK:       code size = 17, addr = 0001:0050
CHECK: 364 | S_REGREL32 [size = 16] `y`
CHECK: 380 | S_END [size = 4]
CHECK: 384 | S_END [size = 4]

CHECK-LABEL: Mod 0001 | `{{.*}}pdb-scopes.test.tmp-b.obj`:
CHECK: 104 | S_GPROC32 [size = 44] `f`
CHECK:       parent = 0, end = 284, addr = 0001:0080, code size = 62
CHECK:       debug start = 8, debug end = 57, flags = none
CHECK: 180 | S_REGREL32 [size = 16] `x`
CHECK: 196 | S_BLOCK32 [size = 24] ``
CHECK:       parent = 104, end = 236
CHECK:       code size = 20, addr = 0001:0095
CHECK: 220 | S_REGREL32 [size = 16] `y`
CHECK: 236 | S_END [size = 4]
CHECK: 240 | S_BLOCK32 [size = 24] ``
CHECK:       parent = 104, end = 280
CHECK:       code size = 20, addr = 0001:0117
CHECK: 264 | S_REGREL32 [size = 16] `w`
CHECK: 280 | S_END [size = 4]
CHECK: 284 | S_END [size = 4]

CHECK-LABEL: Mod 0002 | `* Linker *`:
