summaryrefslogtreecommitdiff
path: root/test/COFF/pdb-type-server-simple.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/COFF/pdb-type-server-simple.test')
-rw-r--r--test/COFF/pdb-type-server-simple.test91
1 files changed, 91 insertions, 0 deletions
diff --git a/test/COFF/pdb-type-server-simple.test b/test/COFF/pdb-type-server-simple.test
new file mode 100644
index 000000000000..c0de4e390914
--- /dev/null
+++ b/test/COFF/pdb-type-server-simple.test
@@ -0,0 +1,91 @@
+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 %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: 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_ID [size = 44] `main`
+CHECK: parent = 0, end = 196, addr = 0002:0000, code size = 27
+CHECK: type = {{.*}}, debug start = 4, debug end = 22, flags = none
+CHECK: 200 | S_UDT [size = 12] `Foo`
+CHECK: original type = [[FOO_COMPLETE]]
+CHECK: 212 | 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_ID [size = 44] `g`
+CHECK: parent = 0, end = 196, addr = 0002: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 = rsp, offset = 8
+CHECK: 196 | S_END [size = 4]
+CHECK: 200 | S_UDT [size = 12] `Foo`
+CHECK: original type = [[FOO_COMPLETE]]
+CHECK: 212 | S_BUILDINFO [size = 8] BuildId = `[[B_BUILD]]`
+CHECK-LABEL: Mod 0002 | `* Linker *`: