cv-def-range-align.s 4.76 KB
# RUN: llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o %t.o
# RUN: llvm-pdbutil dump -symbols %t.o | FileCheck %s

# We used to have a label flushing bug down below by the "BUG" comments that
# would cause the S_DEFRANGE_FRAMEPOINTER_REL records to appear missing. In
# practice, the label would extend past the def range, so it would appear that
# every local was optimized out or had no def ranges.

# CHECK: S_GPROC32_ID {{.*}} `max`
# CHECK: S_LOCAL [size = {{.*}}] `a`
# CHECK: S_DEFRANGE_FRAMEPOINTER_REL
# CHECK: S_LOCAL [size = {{.*}}] `b`
# CHECK: S_DEFRANGE_FRAMEPOINTER_REL

	.text
	.def	 @feat.00;
	.scl	3;
	.type	0;
	.endef
	.globl	@feat.00
.set @feat.00, 0
	.def	 max;
	.scl	2;
	.type	32;
	.endef
	.globl	max                     # -- Begin function max
	.p2align	4, 0x90
max:                                    # @max
.Lfunc_begin0:
	.cv_func_id 0
	.cv_file	1 "C:\\src\\llvm-project\\build\\t.c" "44649E6EBC4FC8880991A1AF1F2D2990" 1
	.cv_loc	0 1 1 0                 # t.c:1:0
.seh_proc max
# %bb.0:                                # %entry
	pushq	%rax
	.seh_stackalloc 8
	.seh_endprologue
	movl	%edx, 4(%rsp)
	movl	%ecx, (%rsp)
.Ltmp0:
	.cv_loc	0 1 2 0                 # t.c:2:0
	movl	(%rsp), %eax
	cmpl	4(%rsp), %eax
	jle	.LBB0_2
# %bb.1:                                # %cond.true
	movl	(%rsp), %eax
	jmp	.LBB0_3
.LBB0_2:                                # %cond.false
	movl	4(%rsp), %eax
.LBB0_3:                                # %cond.end
	popq	%rcx
	retq
.Ltmp1:
.Lfunc_end0:
	.seh_handlerdata
	.text
	.seh_endproc
                                        # -- End function
	.section	.debug$S,"dr"
	.p2align	2
	.long 4
	.long	241                     # Symbol subsection for max
	.long	.Ltmp7-.Ltmp6           # Subsection size
.Ltmp6:
	.short	.Ltmp9-.Ltmp8           # Record length
.Ltmp8:
	.short	4423                    # Record kind: S_GPROC32_ID
	.long	0                       # PtrParent
	.long	0                       # PtrEnd
	.long	0                       # PtrNext
	.long	.Lfunc_end0-max         # Code size
	.long	0                       # Offset after prologue
	.long	0                       # Offset before epilogue
	.long	4098                    # Function type index
	.secrel32	max             # Function section relative address
	.secidx	max                     # Function section index
	.byte	0                       # Flags
	.asciz	"max"                   # Function name
.Ltmp9:
	.short	.Ltmp11-.Ltmp10         # Record length
.Ltmp10:
	.short	4114                    # Record kind: S_FRAMEPROC
	.long	8                       # FrameSize
	.long	0                       # Padding
	.long	0                       # Offset of padding
	.long	0                       # Bytes of callee saved registers
	.long	0                       # Exception handler offset
	.short	0                       # Exception handler section
	.long	81920                   # Flags (defines frame register)
.Ltmp11:
	.short	.Ltmp13-.Ltmp12         # Record length
.Ltmp12:
	.short	4414                    # Record kind: S_LOCAL
	.long	18                      # TypeIndex
	.short	1                       # Flags
	.asciz	"a"
	# BUG
	.p2align 2
.Ltmp13:
	.cv_def_range	 .Ltmp0 .Ltmp1, frame_ptr_rel, 8
	.short	.Ltmp15-.Ltmp14         # Record length
.Ltmp14:
	.short	4414                    # Record kind: S_LOCAL
	.long	18                      # TypeIndex
	.short	1                       # Flags
	.asciz	"b"
	# BUG
	.p2align 2
.Ltmp15:
	.cv_def_range	 .Ltmp0 .Ltmp1, frame_ptr_rel, 8
	.short	2                       # Record length
	.short	4431                    # Record kind: S_PROC_ID_END
.Ltmp7:
	.p2align	2
	.cv_linetable	0, max, .Lfunc_end0
	.cv_filechecksums               # File index to string table offset subsection
	.cv_stringtable                 # String table
	.long	241
	.long	.Ltmp17-.Ltmp16         # Subsection size
.Ltmp16:
.Ltmp17:
	.p2align	2
	.section	.debug$T,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	# ArgList (0x1000) {
	#   TypeLeafKind: LF_ARGLIST (0x1201)
	#   NumArgs: 2
	#   Arguments [
	#     ArgType: long (0x12)
	#     ArgType: long (0x12)
	#   ]
	# }
	.byte	0x0e, 0x00, 0x01, 0x12
	.byte	0x02, 0x00, 0x00, 0x00
	.byte	0x12, 0x00, 0x00, 0x00
	.byte	0x12, 0x00, 0x00, 0x00
	# Procedure (0x1001) {
	#   TypeLeafKind: LF_PROCEDURE (0x1008)
	#   ReturnType: long (0x12)
	#   CallingConvention: NearC (0x0)
	#   FunctionOptions [ (0x0)
	#   ]
	#   NumParameters: 2
	#   ArgListType: (long, long) (0x1000)
	# }
	.byte	0x0e, 0x00, 0x08, 0x10
	.byte	0x12, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x02, 0x00
	.byte	0x00, 0x10, 0x00, 0x00
	# FuncId (0x1002) {
	#   TypeLeafKind: LF_FUNC_ID (0x1601)
	#   ParentScope: 0x0
	#   FunctionType: long (long, long) (0x1001)
	#   Name: max
	# }
	.byte	0x0e, 0x00, 0x01, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x01, 0x10, 0x00, 0x00
	.byte	0x6d, 0x61, 0x78, 0x00