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

# CHECK-LABEL: P
# CHECK-NEXT: tiny.cc:11

# CHECK: Unprotected: 0 (0.00%), Protected: 1 (100.00%)

# Source (tiny.cc):
#   void a() {}
#   void b() {}
#   int main(int argc, char** argv) {
#     void(*ptr)();
#     if (argc == 1)
#       ptr = &a;
#     else
#       ptr = &b;
#     ptr();
#   }
# Compile with (output is in tiny.s.0):
#    clang++ -flto -fsanitize=cfi -fvisibility=hidden -c tiny.cc -o tiny.o -gmlt
#    clang++ tiny.o -o tiny -flto -fuse-ld=gold -Wl,-plugin-opt,save-temps
#    clang++ -fsanitize=cfi -flto -fvisibility=hidden -c tiny.cc -o tiny.o -gmlt
#    llvm-lto2 run @tiny.resolution.txt -o tiny.s -filetype=asm

  .text
  .file "ld-temp.o"
  .p2align  4, 0x90
  .type _Z1av.cfi,@function
_Z1av.cfi:
.Lfunc_begin0:
  .file 1 "tiny.cc"
  .loc  1 1 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 1 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 2 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 2 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 4 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
  movl  $0, -8(%rbp)
  movl  %edi, -4(%rbp)
  movq  %rsi, -24(%rbp)
.Ltmp4:
  .loc  1 6 12 prologue_end
  cmpl  $1, -4(%rbp)
  .loc  1 6 7 is_stmt 0
  jne .LBB2_2
  .loc  1 0 7
  leaq  _Z1av(%rip), %rax
  .loc  1 7 9 is_stmt 1
  movq  %rax, -16(%rbp)
  .loc  1 7 5 is_stmt 0
  jmp .LBB2_3
.LBB2_2:
  .loc  1 0 5
  leaq  _Z1bv(%rip), %rax
  .loc  1 9 9 is_stmt 1
  movq  %rax, -16(%rbp)
.LBB2_3:
  .loc  1 0 9 is_stmt 0
  leaq  .L.cfi.jumptable(%rip), %rcx
  .loc  1 11 3 is_stmt 1
  movq  -16(%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 12 1
  movl  -8(%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  ""
  .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:

