# RUN: yaml2obj %S/Inputs/pdb-file-statics-a.yaml > %t.a.obj
# RUN: yaml2obj %S/Inputs/pdb-file-statics-b.yaml > %t.b.obj
# RUN: lld-link %t.a.obj %t.b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb
# RUN: llvm-pdbutil dump -symbols %t.pdb | FileCheck %s

# S_FILESTATIC records are unique in that they refer to the string table, but
# they do *not* go through the file checksums table.  They refer directly to
# the string table.  This makes for special handling in the linker, so it
# deserves a custom test.

# Clang doesn't currently generate these records, but MSVC does, so we have to
# be able to correctly link them.  These records are only generated when
# optimizations are turned on.

# // a.cpp
# // cl.exe /Z7 /O1 /c a.cpp
# static int x = 0;
#
# void b(int);
#
# void a(int) {
#   if (x)
#     b(x);
# }
#
# int main(int argc, char **argv) {
#   a(argc);
#   return x;
# }
#
# // b.cpp
# // cl.exe /Z7 /O1 /c a.cpp
# void a(int);
#
# static int y = 0;
#
# void b(int) {
#   if (y)
#     a(y);
# }

# CHECK:                           Symbols
# CHECK: ============================================================
# CHECK-LABEL:   Mod 0000 | `{{.*}}a.obj`:
# CHECK:              232 | S_FILESTATIC [size = 16] `x`
# CHECK-NEXT:               type = 0x0074 (int), file name = 2 (D:\src\llvmbuild\cl\Debug\x64\a.obj), flags = enreg global | enreg static
# CHECK:         Mod 0001 | `{{.*}}b.obj`:
# CHECK:              232 | S_FILESTATIC [size = 16] `y`
# CHECK-NEXT:               type = 0x0074 (int), file name = 74 (D:\src\llvmbuild\cl\Debug\x64\b.obj), flags = enreg global | enreg static
# CHECK-LABEL:   Mod 0002 | `* Linker *`:

