# This test verifies that an empty range list in the .debug_ranges section
# doesn't crash dsymutil. As clang does not produce this kind of debug
# info anymore, we used this hand-crafted assembly file to produce a testcase
# Compile with:
#        llvm-mc -triple x86_64-apple-darwin -filetype=obj -o 1.o empty_range.o

# RUN: dsymutil -f -y %p/dummy-debug-map.map -oso-prepend-path %p/../Inputs/empty_range -o - | llvm-dwarfdump -debug-info - | FileCheck %s

        .section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 11
	.globl	__Z3foov
	.align	4, 0x90
__Z3foov:                               ## @_Z3foov
Lfunc_begin0:
	pushq	%rbp
	movq	%rsp, %rbp
	popq	%rbp
	retq
Lfunc_end0:
	.section	__DWARF,__debug_abbrev,regular,debug
Lsection_abbrev:
	.byte	1                       ## Abbreviation Code
	.byte	17                      ## DW_TAG_compile_unit
	.byte	1                       ## DW_CHILDREN_yes
	.byte	0                       ## EOM(1)
	.byte	0                       ## EOM(2)
	.byte	2                       ## Abbreviation Code
	.byte	46                      ## DW_TAG_subprogram
	.byte	0                       ## DW_CHILDREN_no
	.byte	17                      ## DW_AT_low_pc
	.byte	1                       ## DW_FORM_addr
        .byte   0x55                    ## DW_AT_ranges
        .byte   6                       ## DW_FORM_data4
	.byte	0                       ## EOM(1)
	.byte	0                       ## EOM(2)
	.byte	0                       ## EOM(3)
	.section	__DWARF,__debug_info,regular,debug
Lsection_info:
	.long	22                      ## Length of Unit
	.short	2                       ## DWARF version number
	.long	0                       ## Offset Into Abbrev. Section
	.byte	8                       ## Address Size (in bytes)
	.byte	1                       ## Abbrev [1]  DW_TAG_compile_unit
	.byte	2                       ## Abbrev [2] DW_TAG_subprogram
	.quad	Lfunc_begin0            ## DW_AT_low_pc
        .long   0                       ## DW_AT_ranges (pointing at an empty entry)
	.byte	0                       ## End Of Children Mark
	.section	__DWARF,__debug_ranges,regular,debug
Ldebug_range:
        .long 0
        .long 0

# CHECK:  DW_TAG_compile_unit
# CHECK:    DW_TAG_subprogram
# CHECK-NEXT:      DW_AT_low_pc{{.*}}(0x0000000000010000)
# CHECK-NEXT:      DW_AT_ranges{{.*}}(0x00000000)

# There was a bug that would use the currently active object file when a
# debug map object isn't found. Check that we only linked one file.
# CHECK-NOT: DW_TAG_compile_unit

