# RUN: llvm-mc -triple=x86_64-windows -filetype=obj < %s | llvm-readobj -codeview | FileCheck %s

# C source to generate the assembly:
# volatile int unlikely_cond = 0;
# extern void __declspec(noreturn) abort();
# __forceinline void f() {
#   if (unlikely_cond)
#     abort();
# }
# void g() {
#   unlikely_cond = 0;
#   f();
#   unlikely_cond = 0;
# }

# This test is interesting because the inlined instructions are discontiguous.
# LLVM's block layout algorithms will put the 'abort' call last, as it is
# considered highly unlikely to execute. This is similar to what it does for
# calls to __asan_report*, for which it is very important to have an accurate
# stack trace.

# CHECK:    GlobalProcIdSym {
# CHECK:      FunctionType: g (0x1003)
# CHECK:      CodeOffset: g+0x0
# CHECK:      DisplayName: g
# CHECK:      LinkageName: g
# CHECK:    }
# CHECK:    InlineSiteSym {
# CHECK:      Inlinee: f (0x1002)
# CHECK:      BinaryAnnotations [
# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0xE, LineOffset: 1}
# CHECK-NEXT:   ChangeCodeLength: 0x9
# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0xF, LineOffset: 1}
# CHECK-NEXT:   ChangeCodeLength: 0x7
# CHECK-NEXT: ]

	.text
	.globl	g
g:                                      # @g
.Lfunc_begin0:
	.cv_func_id 0
	.cv_file	1 "C:\\src\\llvm\\build\\t.cpp"
	.cv_loc	0 1 7 0 is_stmt 0       # t.cpp:7:0
.seh_proc g
	subq	$40, %rsp
	.seh_stackalloc 40
	.seh_endprologue
	.cv_loc	0 1 8 17                # t.cpp:8:17
	movl	$0, unlikely_cond(%rip)
	.cv_inline_site_id 1 within 0 inlined_at 1 9 3
	.cv_loc	1 1 4 7                 # t.cpp:4:7
	cmpl	$0, unlikely_cond(%rip)
	jne	.LBB0_1
	.cv_loc	0 1 10 17               # t.cpp:10:17
	movl	$0, unlikely_cond(%rip)
	.cv_loc	0 1 11 1                # t.cpp:11:1
	addq	$40, %rsp
	retq

.LBB0_1:                                # %if.then.i
	.cv_loc	1 1 5 5                 # t.cpp:5:5
	callq	abort
	ud2
.Lfunc_end0:
	.seh_handlerdata
	.text
	.seh_endproc

	.bss
	.globl	unlikely_cond           # @unlikely_cond
	.p2align	2
unlikely_cond:
	.long	0                       # 0x0

	.section	.debug$S,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	.long	246                     # Inlinee lines subsection
	.long	.Ltmp9-.Ltmp8           # Subsection size
.Ltmp8:
	.long	0                       # Inlinee lines signature

                                        # Inlined function f starts at t.cpp:3
	.long	4098                    # Type index of inlined function
	.long	0                       # Offset into filechecksum table
	.long	3                       # Starting line number
.Ltmp9:
	.p2align	2
	.long	241                     # Symbol subsection for g
	.long	.Ltmp11-.Ltmp10         # Subsection size
.Ltmp10:
	.short	.Ltmp13-.Ltmp12         # Record length
.Ltmp12:
	.short	4423                    # Record kind: S_GPROC32_ID
	.long	0                       # PtrParent
	.long	0                       # PtrEnd
	.long	0                       # PtrNext
	.long	.Lfunc_end0-g           # Code size
	.long	0                       # Offset after prologue
	.long	0                       # Offset before epilogue
	.long	4099                    # Function type index
	.secrel32	g               # Function section relative address
	.secidx	g                       # Function section index
	.byte	0                       # Flags
	.asciz	"g"                     # Function name
.Ltmp13:
	.short	.Ltmp15-.Ltmp14         # Record length
.Ltmp14:
	.short	4429                    # Record kind: S_INLINESITE
	.long	0                       # PtrParent
	.long	0                       # PtrEnd
	.long	4098                    # Inlinee type index
	.cv_inline_linetable	1 1 3 .Lfunc_begin0 .Lfunc_end0
.Ltmp15:
	.short	2                       # Record length
	.short	4430                    # Record kind: S_INLINESITE_END
	.short	2                       # Record length
	.short	4431                    # Record kind: S_PROC_ID_END
.Ltmp11:
	.p2align	2
	.cv_linetable	0, g, .Lfunc_end0
	.long	241                     # Symbol subsection for globals
	.long	.Ltmp17-.Ltmp16         # Subsection size
.Ltmp16:
	.short	.Ltmp19-.Ltmp18         # Record length
.Ltmp18:
	.short	4365                    # Record kind: S_GDATA32
	.long	4100                    # Type
	.secrel32	unlikely_cond   # DataOffset
	.secidx	unlikely_cond           # Segment
	.asciz	"unlikely_cond"         # Name
.Ltmp19:
.Ltmp17:
	.p2align	2
	.cv_filechecksums               # File index to string table offset subsection
	.cv_stringtable                 # String table
	.section	.debug$T,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	# ArgList (0x1000) {
	#   TypeLeafKind: LF_ARGLIST (0x1201)
	#   NumArgs: 0
	#   Arguments [
	#   ]
	# }
	.byte	0x06, 0x00, 0x01, 0x12
	.byte	0x00, 0x00, 0x00, 0x00
	# Procedure (0x1001) {
	#   TypeLeafKind: LF_PROCEDURE (0x1008)
	#   ReturnType: void (0x3)
	#   CallingConvention: NearC (0x0)
	#   FunctionOptions [ (0x0)
	#   ]
	#   NumParameters: 0
	#   ArgListType: () (0x1000)
	# }
	.byte	0x0e, 0x00, 0x08, 0x10
	.byte	0x03, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x10, 0x00, 0x00
	# FuncId (0x1002) {
	#   TypeLeafKind: LF_FUNC_ID (0x1601)
	#   ParentScope: 0x0
	#   FunctionType: void () (0x1001)
	#   Name: f
	# }
	.byte	0x0e, 0x00, 0x01, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x01, 0x10, 0x00, 0x00
	.byte	0x66, 0x00, 0xf2, 0xf1
	# FuncId (0x1003) {
	#   TypeLeafKind: LF_FUNC_ID (0x1601)
	#   ParentScope: 0x0
	#   FunctionType: void () (0x1001)
	#   Name: g
	# }
	.byte	0x0e, 0x00, 0x01, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x01, 0x10, 0x00, 0x00
	.byte	0x67, 0x00, 0xf2, 0xf1
	# Modifier (0x1004) {
	#   TypeLeafKind: LF_MODIFIER (0x1001)
	#   ModifiedType: int (0x74)
	#   Modifiers [ (0x2)
	#     Volatile (0x2)
	#   ]
	# }
	.byte	0x0a, 0x00, 0x01, 0x10
	.byte	0x74, 0x00, 0x00, 0x00
	.byte	0x02, 0x00, 0xf2, 0xf1

