Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lld / test / COFF / guardcf-lto.ll
blobbecd4a94549c909cac465e3c36c9969d378b6ed9
1 ; REQUIRES: x86
2 ; Set up an import library for a DLL that will do the indirect call.
3 ; RUN: echo -e 'LIBRARY library\nEXPORTS\n  do_indirect_call\n' > %t.def
4 ; RUN: lld-link -def:%t.def -out:%t.lib -machine:x64
6 ; Generate an object that will have the load configuration normally provided by
7 ; the CRT.
8 ; RUN: llvm-mc -triple x86_64-windows-msvc -filetype=obj %S/Inputs/loadconfig-cfg-x64.s -o %t.ldcfg.obj
10 ; RUN: llvm-as %s -o %t.bc
11 ; RUN: lld-link -entry:main -guard:cf -dll %t.bc %t.lib %t.ldcfg.obj -out:%t2.dll
12 ; RUN: llvm-readobj --coff-load-config %t2.dll | FileCheck %s
14 ; There must be *two* entries in the table: DLL entry point, and my_handler.
16 ; CHECK:      LoadConfig [
17 ; CHECK:        GuardCFFunctionTable: 0x{{[^0].*}}
18 ; CHECK-NEXT:   GuardCFFunctionCount: 2
19 ; CHECK-NEXT:   GuardFlags [ (0x10500)
20 ; CHECK-NEXT:     CF_FUNCTION_TABLE_PRESENT (0x400)
21 ; CHECK-NEXT:     CF_INSTRUMENTED (0x100)
22 ; CHECK-NEXT:     CF_LONGJUMP_TABLE_PRESENT (0x10000)
23 ; CHECK-NEXT:   ]
24 ; CHECK:      ]
25 ; CHECK:      GuardFidTable [
26 ; CHECK-NEXT:   0x180{{.*}}
27 ; CHECK-NEXT:   0x180{{.*}}
28 ; CHECK-NEXT: ]
30 target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
31 target triple = "x86_64-pc-windows-msvc19.12.25835"
33 declare dllimport void @do_indirect_call(ptr)
35 define dso_local i32 @main() local_unnamed_addr {
36 entry:
37   tail call void @do_indirect_call(ptr nonnull @my_handler)
38   ret i32 0
41 define dso_local void @my_handler() {
42 entry:
43   ret void