54 lines · plain
1 2# This test ensures that under /DEBUG:GHASH, IPI records LF_FUNC_ID/LF_MFUNC_ID3# 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 /force8RUN: llvm-pdbutil dump -types -ids %t.pdb | FileCheck %s9 10; These object files were generated via the following inputs and commands:11; ----------------------------------------------12; // precomp-ghash-obj.h13; 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.cpp23; #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.cpp31; #include "precomp-ghash-obj.h"32;33; int NS::func(const Foo &f) {34; return 2 * f.X;35; }36; ----------------------------------------------37; // precomp-ghash-precomp.cpp38; #include "precomp-ghash-obj.h"39; ----------------------------------------------40; $ cl /c /Z7 /GS- precomp-ghash-precomp.cpp /Ycprecomp-ghash-obj.h41; $ cl /c /Z7 /GS- precomp-ghash-obj1.cpp /Yuprecomp-ghash-obj.h42; $ cl /c /Z7 /GS- precomp-ghash-obj2.cpp /Yuprecomp-ghash-obj.h43 44CHECK: Types (TPI Stream)45CHECK-NEXT: ============================================================46CHECK: 0x1003 | LF_MFUNCTION47CHECK: 0x1377 | LF_PROCEDURE48CHECK: 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 = 0x100054