Compiler projects using llvm
# RUN: llvm-mc %s -filetype obj -triple aarch64-- -o %t.o
# RUN: llvm-cfi-verify %t.o | FileCheck %s

# CHECK-LABEL: {{^Instruction: .* \(PROTECTED\)}}
# CHECK-NEXT: tiny.cc:9

# 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%)

# Source (tiny.cc):
#   int a() { return 42; }
#   int b() { return 137; }
#   int main(int argc, char** argv) {
#     int(*ptr)();
#     if (argc == 1)
#       ptr = &a;
#     else
#       ptr = &b;
#     return ptr();
#   }
	.text
	.file	"ld-temp.o"
	.p2align	2
	.type	_Z1av.cfi,@function
_Z1av.cfi:
.Lfunc_begin0:
	.file	1 "/tmp/tiny.cc"
	.loc	1 1 0
	.cfi_startproc
	.loc	1 1 11 prologue_end
	mov	w0, #42
	ret
.Ltmp0:
.Lfunc_end0:
	.size	_Z1av.cfi, .Lfunc_end0-_Z1av.cfi
	.cfi_endproc

	.p2align	2
	.type	_Z1bv.cfi,@function
_Z1bv.cfi:
.Lfunc_begin1:
	.loc	1 2 0
	.cfi_startproc
	.loc	1 2 11 prologue_end
	mov	w0, #137
	ret
.Ltmp1:
.Lfunc_end1:
	.size	_Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi
	.cfi_endproc

	.p2align	2
	.type	main,@function
main:
.Lfunc_begin2:
	.loc	1 3 0
	.cfi_startproc
	sub	sp, sp, #48
	stp	x29, x30, [sp, #32]
	add	x29, sp, #32
	.cfi_def_cfa w29, 16
	.cfi_offset w30, -8
	.cfi_offset w29, -16
	stur	wzr, [x29, #-4]
	stur	w0, [x29, #-8]
	str	x1, [sp, #16]
.Ltmp2:
	.loc	1 5 7 prologue_end
	ldur	w8, [x29, #-8]
	cmp	w8, #1
	b.ne	.LBB2_2
	.loc	1 0 7 is_stmt 0
	adrp	x8, _Z1av
	add	x8, x8, :lo12:_Z1av
	.loc	1 6 9 is_stmt 1
	str	x8, [sp, #8]
	.loc	1 6 5 is_stmt 0
	b	.LBB2_3
.LBB2_2:
	.loc	1 0 5
	adrp	x8, _Z1bv
	add	x8, x8, :lo12:_Z1bv
	.loc	1 8 9 is_stmt 1
	str	x8, [sp, #8]
.LBB2_3:
	.loc	1 0 9 is_stmt 0
	adrp	x8, .L.cfi.jumptable
	add	x9, x8, :lo12:.L.cfi.jumptable
	.loc	1 9 10 is_stmt 1
	ldr	x8, [sp, #8]
	sub	x9, x8, x9
	lsr	x10, x9, #2
	orr	x9, x10, x9, lsl #62
	cmp	x9, #1
	b.ls	.LBB2_5
	brk	#0x1
.LBB2_5:
	blr	x8
	.loc	1 9 3 is_stmt 0
	ldp	x29, x30, [sp, #32]
	add	sp, sp, #48
	ret
.Ltmp3:
.Lfunc_end2:
	.size	main, .Lfunc_end2-main
	.cfi_endproc

	.p2align	2
	.type	.L.cfi.jumptable,@function
.L.cfi.jumptable:
.Lfunc_begin3:
	.cfi_startproc
	//APP
	b	_Z1av.cfi
	b	_Z1bv.cfi

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

	.type	.L__unnamed_1,@object
	.section	.rodata,"a",@progbits
	.p2align	2
.L__unnamed_1:
	.size	.L__unnamed_1, 0

	.section	.debug_str,"MS",@progbits,1
.Linfo_string0:
	.asciz	"clang version 7.0.0 (trunk 335774) (llvm/trunk 335775)"
.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:
	.word	38
	.hword	4
	.word	.debug_abbrev
	.byte	8
	.byte	1
	.word	.Linfo_string0
	.hword	4
	.word	.Linfo_string1
	.word	.Lline_table_start0
	.word	.Linfo_string2
	.xword	.Lfunc_begin0
	.word	.Lfunc_end2-.Lfunc_begin0
	.section	.debug_ranges,"",@progbits
	.section	.debug_macinfo,"",@progbits
	.byte	0

	.type	_Z1av,@function
.set _Z1av, .L.cfi.jumptable
	.type	_Z1bv,@function
.set _Z1bv, .L.cfi.jumptable+4
	.ident	"clang version 7.0.0 (trunk 335774) (llvm/trunk 335775)"
	.section	".note.GNU-stack","",@progbits
	.section	.debug_line,"",@progbits
.Lline_table_start0: