1
2# This test ensures that under /DEBUG:GHASH, IPI records LF_FUNC_ID/LF_MFUNC_ID
3# have properly remapped indices to corresponding TPI records.
4
5RUN: lld-link %p/Inputs/precomp-ghash-precomp.obj \
6RUN:    %p/Inputs/precomp-ghash-obj1.obj\
7RUN:    %p/Inputs/precomp-ghash-obj2.obj /debug:ghash /out:%t.exe /pdb:%t.pdb /nodefaultlib /force
8RUN: llvm-pdbutil dump -types -ids %t.pdb | FileCheck %s
9
10; These object files were generated via the following inputs and commands:
11; ----------------------------------------------
12; // precomp-ghash-obj.h
13; namespace NS {
14;   struct Foo {
15;     explicit Foo(int x) : X(x) {}
16;     int X;
17;   };
18;
19;   int func(const Foo &f);
20; }
21; ----------------------------------------------
22; // precomp-ghash-obj1.cpp
23; #include "precomp-ghash-obj.h"
24;
25; int main(int argc, char **argv) {
26;   NS::Foo f(argc);
27;   return NS::func(f);
28; }
29; ----------------------------------------------
30; // precomp-ghash-obj2.cpp
31; #include "precomp-ghash-obj.h"
32;
33; int NS::func(const Foo &f) {
34;   return 2 * f.X;
35; }
36; ----------------------------------------------
37; // precomp-ghash-precomp.cpp
38; #include "precomp-ghash-obj.h"
39; ----------------------------------------------
40; $ cl /c /Z7 /GS- precomp-ghash-precomp.cpp /Ycprecomp-ghash-obj.h
41; $ cl /c /Z7 /GS- precomp-ghash-obj1.cpp /Yuprecomp-ghash-obj.h
42; $ cl /c /Z7 /GS- precomp-ghash-obj2.cpp /Yuprecomp-ghash-obj.h
43
44CHECK:                           Types (TPI Stream)
45CHECK-NEXT: ============================================================
46CHECK:   0x1003 | LF_MFUNCTION
47CHECK:   0x1377 | LF_PROCEDURE
48CHECK:                     Types (IPI Stream)
49CHECK-NEXT: ============================================================
50CHECK:   0x10A5 | LF_FUNC_ID [size = 20]
51CHECK-NEXT:       name = main, type = 0x1377, parent scope = <no type>
52CHECK-NEXT:  0x10A6 | LF_MFUNC_ID [size = 20]
53CHECK-NEXT:           name = {ctor}, type = 0x1003, class type = 0x1000
54