; Test that external functions have jumptable entries emitted even if they are ; not address-taken when Cross-DSO CFI is used, but not otherwise. ; RUN: opt -S -passes=lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml %s | FileCheck --check-prefixes=CHECK,CROSSDSO %s ; RUN: grep -v "llvm.module.flags" %s | opt -S -passes=lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml | FileCheck --check-prefixes=CHECK,NORMAL %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ;;; Defined in the ThinLTO portion of the build (e.g. the summary) ; CROSSDSO: declare !type !1 !type !2 hidden void @external.cfi() ; NORMAL: declare !type !1 !type !2 void @external() declare !type !1 !type !2 void @external() ; Don't emit jumptable entries for external declarations/non-external definitions ; CHECK-NOT: @external2 ; CHECK-NOT: @internal ;;; Defined in the regular LTO portion of the build ; CROSSDSO: define hidden void @regularlto_external.cfi() ; NORMAL: define void @regularlto_external() define void @regularlto_external() !type !1 !type !2 { ret void } ; CHECK: define internal void @regularlto_internal() define internal void @regularlto_internal() !type !1 !type !2 { ret void } !cfi.functions = !{!0, !3, !4} !llvm.module.flags = !{!5} !0 = !{!"external", i8 0, !1, !2} !1 = !{i64 0, !"typeid1"} !2 = !{i64 0, i64 1234} !3 = !{!"external2", i8 1, !1, !2} !4 = !{!"internal", i8 0, !1, !2} !5 = !{i32 4, !"Cross-DSO CFI", i32 1}