# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o %t.o
# RUN: llvm-cfi-verify %t.o 2>&1 --summarize | FileCheck %s

# This is the same file as protected-lineinfo.s, however contains a hand-
# assembled function (fake_function) that has no line table information
# associated with it. Because there is no LT info, the indirect call made in the
# function should not be reported at all by llvm-cfi-verify.

# We can test that this indirect call is ignored from the final statistics
# reporting of the cfi-verify program. It should only find a single indirect CF
# instruction at `tiny.cc:11` (see protected-lineinfo.s for the source).

# CHECK-NOT: Begin Instruction

# CHECK: Expected Protected: 1 (100.00%)
# CHECK: Unexpected Protected: 0 (0.00%)
# CHECK: Expected Unprotected: 0 (0.00%)
# CHECK: Unexpected Unprotected (BAD): 0 (0.00%)

  .text
  .file "ld-temp.o"
  .p2align  4, 0x90
  .type fake_function,@function
fake_function:
  nop
  nop
  nop
  nop
  callq *%rax
  nop
  nop
  nop
  nop
  .type _Z1av.cfi,@function
_Z1av.cfi:
.Lfunc_begin0:
  .file 1 "tiny.cc"
  .loc  1 3 0
  .cfi_startproc
  pushq %rbp
  .cfi_def_cfa_offset 16
  .cfi_offset %rbp, -16
  movq  %rsp, %rbp
  .cfi_def_cfa_register %rbp
.Ltmp0:
  .loc  1 3 11 prologue_end
  popq  %rbp
  retq
.Ltmp1:
.Lfunc_end0:
  .size _Z1av.cfi, .Lfunc_end0-_Z1av.cfi
  .cfi_endproc

  .p2align  4, 0x90
  .type _Z1bv.cfi,@function
_Z1bv.cfi:
.Lfunc_begin1:
  .loc  1 4 0
  .cfi_startproc
  pushq %rbp
  .cfi_def_cfa_offset 16
  .cfi_offset %rbp, -16
  movq  %rsp, %rbp
  .cfi_def_cfa_register %rbp
.Ltmp2:
  .loc  1 4 11 prologue_end
  popq  %rbp
  retq
.Ltmp3:
.Lfunc_end1:
  .size _Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi
  .cfi_endproc

  .hidden main
  .globl  main
  .p2align  4, 0x90
  .type main,@function
main:
.Lfunc_begin2:
  .loc  1 6 0
  .cfi_startproc
  pushq %rbp
  .cfi_def_cfa_offset 16
  .cfi_offset %rbp, -16
  movq  %rsp, %rbp
  .cfi_def_cfa_register %rbp
  subq  $32, %rsp
  movb  $32, -1(%rbp)
  movl  $0, -12(%rbp)
  movl  %edi, -8(%rbp)
  movq  %rsi, -32(%rbp)
.Ltmp4:
  .loc  1 8 12 prologue_end
  cmpl  $1, -8(%rbp)
  .loc  1 8 7 is_stmt 0
  jne .LBB2_2
  .loc  1 0 7
  leaq  _Z1av(%rip), %rax
  .loc  1 9 9 is_stmt 1
  movq  %rax, -24(%rbp)
  .loc  1 9 5 is_stmt 0
  jmp .LBB2_3
.LBB2_2:
  .loc  1 0 5
  leaq  _Z1bv(%rip), %rax
  .loc  1 11 9 is_stmt 1
  movq  %rax, -24(%rbp)
.LBB2_3:
  .loc  1 0 9 is_stmt 0
  leaq  .L.cfi.jumptable(%rip), %rcx
  .loc  1 13 3 is_stmt 1
  movq  -24(%rbp), %rax
  movq  %rax, %rdx
  subq  %rcx, %rdx
  movq  %rdx, %rcx
  shrq  $3, %rcx
  shlq  $61, %rdx
  orq %rcx, %rdx
  cmpq  $1, %rdx
  jbe .LBB2_5
  ud2
.LBB2_5:
  callq *%rax
  .loc  1 14 11
  movb  $-1, -1(%rbp)
  .loc  1 15 1
  movl  -12(%rbp), %eax
  addq  $32, %rsp
  popq  %rbp
  retq
.Ltmp5:
.Lfunc_end2:
  .size main, .Lfunc_end2-main
  .cfi_endproc

  .p2align  3, 0x90
  .type .L.cfi.jumptable,@function
.L.cfi.jumptable:
.Lfunc_begin3:
  .cfi_startproc
  #APP
  jmp _Z1av.cfi@PLT
  int3
  int3
  int3
  jmp _Z1bv.cfi@PLT
  int3
  int3
  int3

  #NO_APP
.Lfunc_end3:
  .size .L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable
  .cfi_endproc

  .section  .debug_str,"MS",@progbits,1
.Linfo_string0:
  .asciz  "clang version 6.0.0 (trunk 316774)"
.Linfo_string1:
  .asciz  "tiny.cc"
.Linfo_string2:
  .asciz  "/tmp/a/b"
  .section  .debug_abbrev,"",@progbits
  .byte 1
  .byte 17
  .byte 0
  .byte 37
  .byte 14
  .byte 19
  .byte 5
  .byte 3
  .byte 14
  .byte 16
  .byte 23
  .byte 27
  .byte 14
  .byte 17
  .byte 1
  .byte 18
  .byte 6
  .byte 0
  .byte 0
  .byte 0
  .section  .debug_info,"",@progbits
.Lcu_begin0:
  .long 38
  .short  4
  .long .debug_abbrev
  .byte 8
  .byte 1
  .long .Linfo_string0
  .short  4
  .long .Linfo_string1
  .long .Lline_table_start0
  .long .Linfo_string2
  .quad .Lfunc_begin0
  .long .Lfunc_end2-.Lfunc_begin0
  .section  .debug_ranges,"",@progbits
  .section  .debug_macinfo,"",@progbits
.Lcu_macro_begin0:
  .byte 0

  .type _Z1av,@function
_Z1av = .L.cfi.jumptable
  .type _Z1bv,@function
_Z1bv = .L.cfi.jumptable+8
  .ident  "clang version 6.0.0 (trunk 316774)"
  .section  ".note.GNU-stack","",@progbits
  .section  .debug_line,"",@progbits
.Lline_table_start0:

