[clang-tidy][use-internal-linkage]fix false positives for global overloaded operator...
[llvm-project.git] / lld / test / COFF / pdb-type-server-simple.test
blob93d66cde4f712982be72d097ce255dd1e4366bfa
1 Replicate this scenario:
3 $ cat a.c
4 struct Foo { int x; };
5 int g(struct Foo *p);
6 int main() {
7   struct Foo f = {42};
8   return g(&f);
11 $ cat b.c
12 struct Foo { int x; };
13 int g(struct Foo *p) { return p->x; }
15 $ cl -c a.c b.c -Zi -Fdts.pdb
17 $ lld-link a.obj b.obj -debug -entry:main -nodefaultlib -out:t.exe
19 RUN: rm -rf %t && mkdir -p %t && cd %t
20 RUN: yaml2obj %S/Inputs/pdb-type-server-simple-a.yaml -o a.obj
21 RUN: yaml2obj %S/Inputs/pdb-type-server-simple-b.yaml -o b.obj
22 RUN: llvm-pdbutil yaml2pdb %S/Inputs/pdb-type-server-simple-ts.yaml -pdb ts.pdb
23 RUN: lld-link a.obj b.obj -entry:main -debug:noghash -out:t.exe -pdb:t.pdb -nodefaultlib -summary | FileCheck %s -check-prefix SUMMARY
24 RUN: llvm-pdbutil dump -symbols -types -ids -globals %t/t.pdb | FileCheck %s
26 Re-run with /DEBUG:GHASH
27 RUN: lld-link a.obj b.obj -entry:main -debug:ghash -out:t.exe -pdb:t.pdb -nodefaultlib -summary -verbose
28 RUN: llvm-pdbutil dump -symbols -types -ids -globals %t/t.pdb | FileCheck %s
30 Re-run with pdb from outputpath
31 RUN: mkdir -p libs
32 RUN: cp a.obj libs/a.obj && cp b.obj libs/b.obj
33 RUN: lld-link libs/a.obj libs/b.obj -entry:main -debug:ghash -out:t.exe -pdb:t.pdb -nodefaultlib -summary 2>&1 | FileCheck %s -check-prefix FAILURE-MISSING-PDBFILE
35 CHECK-LABEL: Types (TPI Stream)
36 CHECK: ============================================================
38 CHECK:   [[FOO_DECL:[^ ]*]] | LF_STRUCTURE [size = 36] `Foo`
40 CHECK:   [[FOO_PTR:[^ ]*]] | LF_POINTER [size = 12]
41 CHECK-NEXT:            referent = [[FOO_DECL]]
43 CHECK:   [[G_ARGS:[^ ]*]] | LF_ARGLIST [size = 12]
44 CHECK-NEXT:            [[FOO_PTR]]: `Foo*`
46 CHECK:   [[G_PROTO:[^ ]*]] | LF_PROCEDURE [size = 16]
47 CHECK-NEXT:       return type = 0x0074 (int), # args = 1, param list = [[G_ARGS]]
48 CHECK-NEXT:       calling conv = cdecl, options = None
50 CHECK:   [[FOO_COMPLETE:[^ ]*]] | LF_STRUCTURE [size = 36] `Foo`
51 CHECK-NEXT:       unique name: `.?AUFoo@@`
52 CHECK-NEXT:       vtable: <no type>, base list: <no type>, field list: 0x{{.*}}
53 CHECK:            options: has unique name
54 CHECK:   [[MAIN_PROTO:[^ ]*]] | LF_PROCEDURE [size = 16]
55 CHECK:            return type = 0x0074 (int), # args = 0, param list = 0x{{.*}}
56 CHECK:            calling conv = cdecl, options = None
59 CHECK-LABEL:                      Types (IPI Stream)
60 CHECK: ============================================================
61 CHECK:   [[MAIN_ID:[^ ]*]] | LF_FUNC_ID [size = 20]
62 CHECK:            name = main, type = [[MAIN_PROTO]], parent scope = <no type>
63 CHECK:   [[G_ID:[^ ]*]] | LF_FUNC_ID [size = 16]
64 CHECK:            name = g, type = [[G_PROTO]], parent scope = <no type>
65 CHECK:   [[A_BUILD:[^ ]*]] | LF_BUILDINFO [size = 28]
66 CHECK:            {{.*}}: `a.c`
67 CHECK:   [[B_BUILD:[^ ]*]] | LF_BUILDINFO [size = 28]
68 CHECK:            {{.*}}: `b.c`
70 CHECK-LABEL:                       Global Symbols
71 CHECK:       ============================================================
72 CHECK-NEXT:    Records
73 CHECK-NEXT:       36 | S_PROCREF [size = 20] `main`
74 CHECK-NEXT:            module = 1, sum name = 0, offset = 104
75 CHECK-NEXT:       68 | S_PROCREF [size = 16] `g`
76 CHECK-NEXT:            module = 2, sum name = 0, offset = 104
77 CHECK-NEXT:       56 | S_UDT [size = 12] `Foo`
78 CHECK-NEXT:            original type = 0x1006
80 CHECK-LABEL:                           Symbols
81 CHECK: ============================================================
82 CHECK-LABEL:   Mod 0000 | `{{.*}}a.obj`:
83 CHECK:        4 | S_OBJNAME [size = 40] sig=0, `C:\src\llvm-project\build\a.obj`
84 CHECK:      104 | S_GPROC32 [size = 44] `main`
85 CHECK:            parent = 0, end = 196, addr = 0001:0000, code size = 27
86 CHECK:            type = {{.*}}, debug start = 4, debug end = 22, flags = none
87 CHECK:      200 | S_BUILDINFO [size = 8] BuildId = `[[A_BUILD]]`
88 CHECK-LABEL:   Mod 0001 | `{{.*}}b.obj`:
89 CHECK:        4 | S_OBJNAME [size = 40] sig=0, `C:\src\llvm-project\build\b.obj`
90 CHECK:       44 | S_COMPILE3 [size = 60]
91 CHECK:            machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c
92 CHECK:            frontend = 19.0.24215.1, backend = 19.0.24215.1
93 CHECK:            flags = security checks | hot patchable
94 CHECK:      104 | S_GPROC32 [size = 44] `g`
95 CHECK:            parent = 0, end = 196, addr = 0001:0032, code size = 13
96 CHECK:            type = {{.*}}, debug start = 5, debug end = 12, flags = none
97 CHECK:      148 | S_FRAMEPROC [size = 32]
98 CHECK:            size = 0, padding size = 0, offset to padding = 0
99 CHECK:            bytes of callee saved registers = 0, exception handler addr = 0000:0000
100 CHECK:            flags = has async eh | opt speed
101 CHECK:      180 | S_REGREL32 [size = 16] `p`
102 CHECK:            type = [[FOO_PTR]] (Foo*), register = RSP, offset = 8
103 CHECK:      196 | S_END [size = 4]
104 CHECK:      200 | S_BUILDINFO [size = 8] BuildId = `[[B_BUILD]]`
105 CHECK-LABEL:   Mod 0002 | `* Linker *`:
107 SUMMARY:                                     Summary
108 SUMMARY-NEXT: --------------------------------------------------------------------------------
109 SUMMARY-NEXT:               2 Input OBJ files (expanded from all cmd-line inputs)
110 SUMMARY-NEXT:               1 PDB type server dependencies
111 SUMMARY-NEXT:               0 Precomp OBJ dependencies
112 SUMMARY-NEXT:              25 Input type records
113 SUMMARY-NEXT:             868 Input type records bytes
114 SUMMARY-NEXT:               9 Merged TPI records
115 SUMMARY-NEXT:              16 Merged IPI records
116 SUMMARY-NEXT:               3 Output PDB strings
117 SUMMARY-NEXT:               4 Global symbol records
118 SUMMARY-NEXT:              14 Module symbol records
119 SUMMARY-NEXT:               2 Public symbol records
121 SUMMARY:      Top 10 types responsible for the most TPI input:
122 SUMMARY-NEXT:        index     total bytes   count     size
123 SUMMARY-NEXT:       0x1006:             36 =     1 *     36
124 SUMMARY: Run llvm-pdbutil to print details about a particular record:
125 SUMMARY-NEXT: llvm-pdbutil dump -types -type-index 0x1006 t.pdb
127 SUMMARY:      Top 10 types responsible for the most IPI input:
128 SUMMARY-NEXT:        index     total bytes   count     size
129 SUMMARY-NEXT:       0x1006:            256 =     1 *    256
130 SUMMARY: Run llvm-pdbutil to print details about a particular record:
131 SUMMARY-NEXT: llvm-pdbutil dump -ids -id-index 0x1006 t.pdb
133 FAILURE-MISSING-PDBFILE-NOT: Cannot use debug info for '{{.*}}.obj'
134 FAILURE-MISSING-PDBFILE-NOT: failed to load reference '{{.*}}.pdb': no such file or directory