# 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 4000 | llc -mtriple=x86_64-apple-darwin -filetype=obj -o %t
# RUN: llvm-dwarfdump %t | 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, {0}, 64)), !dbg !34"

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