# RUN: llvm-mc -triple=i686-pc-win32 -filetype=obj < %s | llvm-readobj --codeview --codeview-subsection-bytes - | FileCheck %s
	.text
	.def	 @feat.00;
	.scl	3;
	.type	0;
	.endef
	.globl	@feat.00
@feat.00 = 1
	.def	 _g;
	.scl	2;
	.type	32;
	.endef
	.globl	_g
	.p2align	4, 0x90
_g:                                     # @g
Lfunc_begin0:
	.cv_file	1 "\\usr\\local\\google\\home\\majnemer\\llvm\\src\\<stdin>"
	.cv_func_id 0
	.cv_loc	0 1 3 0 is_stmt 0       # <stdin>:3:0
# %bb.0:                                # %entry
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	leal	-4(%ebp), %eax
Lvar_begin0:
	#DEBUG_VALUE: g:x <- %eax
	.cv_loc	0 1 4 7                 # <stdin>:4:7
	movl	$0, -4(%ebp)
	.cv_loc	0 1 5 3                 # <stdin>:5:3
	movl	%eax, (%esp)
	calll	_f
	.cv_loc	0 1 6 1                 # <stdin>:6:1
Lvar_end0:
	addl	$8, %esp
	popl	%ebp
	retl
Lfunc_end0:

	.section	.debug$T,"dr"
	.long	4                       # Debug section magic
	.short	6                       # Type record length
	.short	4609                    # Leaf type: LF_ARGLIST
	.long	0                       # Number of arguments
	.short	14                      # Type record length
	.short	4104                    # Leaf type: LF_PROCEDURE
	.long	3                       # Return type index
	.byte	0                       # Calling convention
	.byte	0                       # Function options
	.short	0                       # # of parameters
	.long	4096                    # Argument list type index
	.short	12                      # Type record length
	.short	5633                    # Leaf type: LF_FUNC_ID
	.long	0                       # Scope type index
	.long	4097                    # Function type
	.asciz	"g"                     # Function name
	.section	.debug$S,"dr"
	.long	4                       # Debug section magic
	.long	241                     # Symbol subsection for g
	.long	Ltmp1-Ltmp0             # Subsection size
Ltmp0:
	.short	Ltmp3-Ltmp2             # Record length
Ltmp2:
	.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	0                       # Function type index
	.secrel32	_g              # Function section relative address
	.secidx	_g                      # Function section index
	.byte	0                       # Flags
	.asciz	"g"                     # Function name
Ltmp3:
	.short	2                       # Record length
	.short	4431                    # Record kind: S_PROC_ID_END
	.cv_def_range	Lvar_begin0 Lvar_end0, frame_ptr_rel, -4

# CHECK:    DefRangeFramePointerRelSym {
# CHECK:      Offset: -4
# CHECK:      LocalVariableAddrRange {
# CHECK:        OffsetStart: .text+0x9
# CHECK:        ISectStart: 0x0
# CHECK:        Range: 0xF
# CHECK:      }
# CHECK:      BlockRelocations [
# CHECK:        0x4 IMAGE_REL_I386_SECREL .text
# CHECK:        0x8 IMAGE_REL_I386_SECTION .text
# CHECK:      ]
# CHECK:    }

Ltmp1:
	.p2align	2
	.cv_linetable	0, _g, Lfunc_end0
	.cv_filechecksums               # File index to string table offset subsection
	.cv_stringtable                 # String table

