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