# This test generates too many debug location entries to fit into 65KB required
# by DWARF < 5. Check that the location is set to 0 instead of crashing.
#
# RUN: %python %s 5750 | llc -mtriple=x86_64-apple-darwin -filetype=obj -o - \
# RUN:    | llvm-dwarfdump - | FileCheck %s
#
# CHECK:       0x0000004d:       DW_TAG_formal_parameter
# CHECK-NEXT:      DW_AT_location   (0x00000000
# CHECK-NEXT:           [0x0000000000000000,  0x0000000000000008): )
# CHECK-NEXT:      DW_AT_name   ("self")

import sys

SKELETON = """define void @test() !dbg !24 {{
  {}
  call void @foo(), !dbg !34
  ret void, !dbg !34
}}

; Function Attrs: nounwind readnone speculatable
declare void @llvm.dbg.value(metadata, metadata, metadata) #0

declare void @foo()

attributes #0 = {{ nounwind readnone speculatable }}

!llvm.dbg.cu = !{{!0}}
!llvm.module.flags = !{{!22}}

!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "clang", isOptimized: true, runtimeVersion: 4, emissionKind: FullDebug)
!1 = !DIFile(filename: "asdf.c", directory: "bar")
!2 = !{{}}
!6 = !DIModule(scope: null, name: "dag", includePath: "/")
!8 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !6, file: !1, line: 36, size: 2384384, elements: !2, runtimeLang: DW_LANG_C)
!22 = !{{i32 2, !"Debug Info Version", i32 3}}
!24 = distinct !DISubprogram(name: "main", linkageName: "main", scope: !6, file: !1, line: 1, type: !25, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!25 = !DISubroutineType(types: !2)
!30 = !DILocalVariable(name: "self", arg: 1, scope: !24, file: !1, line: 12, type: !8, flags: DIFlagArtificial)
!34 = !DILocation(line: 12, column: 8, scope: !24)
"""

CALL = "call void @llvm.dbg.value(metadata i64 {0}, metadata !30, metadata !DIExpression(DW_OP_LLVM_fragment, {1}, 8)), !dbg !34"

if __name__ == '__main__':
    N = int(sys.argv[1])
    calls = []
    for i in range(0, N):
        calls.append(CALL.format(i * 10**12, i*8))
    print(SKELETON.format('\n'.join(calls)))
