ziglang / zig

General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
https://ziglang.org
MIT License
34.19k stars 2.5k forks source link

llvm12: Assertion failed: ((FrameIndexExprs.size() == 1 || llvm::all_of(FrameIndexExprs, [](FrameIndexExpr &FIE) { return FIE.Expr && FIE.Expr->isFragment(); })) && "conflicting locations for variable") #8442

Closed mikdusan closed 1 year ago

mikdusan commented 3 years ago

reproduces with assert builds of:

does NOT reproduce with assert builds of:



test "" { const Foo = union(enum) { int: u32, float: f64, third: usize, fourth: isize, fifth: isize, }; const rv = try std.json.parse(Foo, &std.json.TokenStream.init(""), .{}); }


- lldb backtrace:
```gdb
Process 7741 launched: '/Users/mike/project/zig/work/llvm12/_build.assert/zig' (x86_64)
Assertion failed: ((FrameIndexExprs.size() == 1 || llvm::all_of(FrameIndexExprs, [](FrameIndexExpr &FIE) { return FIE.Expr && FIE.Expr->isFragment(); })) && "conflicting locations for variable"), function addMMIEntry, file /opt/src/llvm/12.0.0-rc4/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp, line 319.
Process 7741 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #4: 0x0000000106ce8ee3 zig`llvm::DbgVariable::addMMIEntry(llvm::DbgVariable const&) (.cold.5) + 35
zig`llvm::DbgVariable::addMMIEntry(llvm::DbgVariable const&) (.cold.5):
->  0x106ce8ee3 <+35>: nopw   %cs:(%rax,%rax)
    0x106ce8eed <+45>: nopl   (%rax)

zig`llvm::DbgVariable::addMMIEntry(llvm::DbgVariable const&) (.cold.6):
    0x106ce8ef0 <+0>:  pushq  %rbp
    0x106ce8ef1 <+1>:  movq   %rsp, %rbp
Target 0: (zig) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #0: 0x00007fff203fc462 libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff2042a610 libsystem_pthread.dylib`pthread_kill + 263
    frame #2: 0x00007fff2037d720 libsystem_c.dylib`abort + 120
    frame #3: 0x00007fff2037c9d6 libsystem_c.dylib`__assert_rtn + 314
  * frame #4: 0x0000000106ce8ee3 zig`llvm::DbgVariable::addMMIEntry(llvm::DbgVariable const&) (.cold.5) + 35
    frame #5: 0x000000010452dbbd zig`llvm::DbgVariable::addMMIEntry(llvm::DbgVariable const&) + 525
    frame #6: 0x000000010453534c zig`llvm::DwarfDebug::collectVariableInfoFromMFTable(llvm::DwarfCompileUnit&, llvm::DenseSet<std::__1::pair<llvm::DINode const*, llvm::DILocation const*>, llvm::DenseMapInfo<std::__1::pair<llvm::DINode const*, llvm::DILocation const*> > >&) + 476
    frame #7: 0x0000000104536ef2 zig`llvm::DwarfDebug::collectEntityInfo(llvm::DwarfCompileUnit&, llvm::DISubprogram const*, llvm::DenseSet<std::__1::pair<llvm::DINode const*, llvm::DILocation const*>, llvm::DenseMapInfo<std::__1::pair<llvm::DINode const*, llvm::DILocation const*> > >&) + 66
    frame #8: 0x0000000104538669 zig`llvm::DwarfDebug::endFunctionImpl(llvm::MachineFunction const*) + 265
    frame #9: 0x0000000104519ba0 zig`llvm::DebugHandlerBase::endFunction(llvm::MachineFunction const*) + 112
    frame #10: 0x00000001044fddfd zig`llvm::AsmPrinter::emitFunctionBody() + 13021
    frame #11: 0x0000000102e18a0c zig`llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) + 300
    frame #12: 0x00000001049eaebd zig`llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 349
    frame #13: 0x000000010581bfe2 zig`llvm::FPPassManager::runOnFunction(llvm::Function&) + 1202
    frame #14: 0x0000000105822568 zig`llvm::FPPassManager::runOnModule(llvm::Module&) + 72
    frame #15: 0x000000010581c65e zig`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 1102
    frame #16: 0x0000000100bb0e15 zig`::ZigLLVMTargetMachineEmitToFile(targ_machine_ref=0x000000010f832800, module_ref=0x000000010f22d730, error_message=0x00007ffeefbf8510, is_debug=false, is_small=false, time_report=false, tsan=false, lto=false, asm_filename=0x0000000000000000, bin_filename="zig-cache/o/9a338aa10b8571d6c986cd736ce1feb3/test.o", llvm_ir_filename=0x0000000000000000) at zig_llvm.cpp:296:13
    frame #17: 0x0000000100a92c7e zig`zig_llvm_emit_output(g=0x000000010f81c000) at codegen.cpp:8484:9
    frame #18: 0x0000000100a8f7a2 zig`codegen_build_object(g=0x000000010f81c000) at codegen.cpp:9603:5
    frame #19: 0x0000000100b9ca8c zig`::zig_stage1_build_object(stage1=0x000000010f81c000) at stage1.cpp:130:5
    frame #20: 0x000000010039ff75 zig`Module.build_object(mod=0x000000010f81c000) at stage1.zig:143:32
    frame #21: 0x00000001001b7f6d zig`Compilation.updateStage1Module(comp=0x0000000118008218, main_progress_node=0x00007ffeefbf98a0) at Compilation.zig:3349:31
    frame #22: 0x0000000100171f4b zig`Compilation.performAllTheWork(self=0x0000000118008218) at Compilation.zig:1792:36
    frame #23: 0x000000010016c155 zig`Compilation.update(self=0x0000000118008218) at Compilation.zig:1376:31
    frame #24: 0x0000000100103c01 zig`main.updateModule(gpa=0x00000001097563a8, comp=0x0000000118008218, hook=<unavailable>) at main.zig:2098:20
    frame #25: 0x000000010003167f zig`main.buildOutputType(gpa=0x00000001097563a8, arena=0x00007ffeefbff568, all_args=[][]u8 @ 0x00007ffeefbff540, arg_mode=(payload = main.union:473:15::AnonUnion @ 0x00000001073296ce, tag = zig_test)) at main.zig:1939:17
    frame #26: 0x0000000100006e7e zig`main.mainArgs(gpa=0x00000001097563a8, arena=0x00007ffeefbff568, args=[][]u8 @ 0x00007ffeefbff540) at main.zig:176:31
    frame #27: 0x000000010000663b zig`main(argc=4, argv=0x00007ffeefbff6d8) at stage1.zig:45:24
    frame #28: 0x00007fff20445621 libdyld.dylib`start + 1
    frame #29: 0x00007fff20445621 libdyld.dylib`start + 1

andrewrk commented 3 years ago

2 pieces of information that would be helpful here:

mikdusan commented 3 years ago

2 pieces of information that would be helpful here

andrewrk commented 3 years ago

updated; confirmed issue manifests in LLVM 11 and backtraces to ZigLLVMTargetMachineEmitToFile

So what this means is that it is indeed likely an LLVM bug, but not eligible to be a release blocker for LLVM 12.

mikdusan commented 3 years ago

another manifestation:

$ sw_vers
ProductName:    macOS
ProductVersion: 11.4
BuildVersion:   20F71
$ /opt/llvm-macos11.0-x86_64-12.0.1-rc2-release-assert/bin/llvm-config --version --build-mode --assertion-mode
12.0.1
Release
ON
$ zig build-exe tools/gen_spirv_spec.zig -OReleaseFast
Assertion failed: ((FrameIndexExprs.size() == 1 || llvm::all_of(FrameIndexExprs, [](FrameIndexExpr &FIE) { return FIE.Expr && FIE.Expr->isFragment(); })) && "conflicting locations for variable"), function addMMIEntry, file /opt/src/llvm/12.0.1-rc2/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp, line 319.
zsh: abort      zig build-exe tools/gen_spirv_spec.zig -OReleaseFast
andrewrk commented 2 years ago

Confirmed it still reproduces with LLVM 13.0.1 and 14.0.6, and I have a reduced LLVM IR:

; ModuleID = 'crash.ll'
source_filename = "test"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%std.json.TokenStream = type { i64, %"[]u8", %std.json.StreamingParser, %"?std.json.Token" }
%"[]u8" = type { i8*, i64 }
%std.json.StreamingParser = type { i8, i64, i8, i8, i1, %std.json.StringEscapes, i1, i21, i8, i1, %"std.json.AggregateContainerStack(256)" }
%std.json.StringEscapes = type { %"std.json.struct:18:11", i1 }
%"std.json.struct:18:11" = type { i64 }
%"std.json.AggregateContainerStack(256)" = type { [4 x i64], i64 }
%"?std.json.Token" = type { %std.json.Token, i1 }
%std.json.Token = type { %"std.json.struct:99:13", i4 }
%"std.json.struct:99:13" = type { i64, %std.json.StringEscapes }
%std.json.ParseOptions = type { %"?std.mem.Allocator", i2, i1, i1 }
%"?std.mem.Allocator" = type { %std.mem.Allocator, i1 }
%std.mem.Allocator = type { i8*, %std.mem.Allocator.VTable* }
%std.mem.Allocator.VTable = type { void ({ %"[]u8", i16 }*, i8*, i64, i29, i29, i64)*, void (%"?usize"*, i8*, %"[]u8"*, i29, i64, i29, i64)*, void (i8*, %"[]u8"*, i29, i64)* }
%"?usize" = type { i64, i1 }
%Foo = type { double, i3 }

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

define void @foo() !dbg !539 {
Entry:
  %0 = call fastcc i16 @fallible(), !dbg !542
  ret void
}

define internal fastcc i16 @fallible() unnamed_addr !dbg !544 {
Entry:
  %0 = alloca %std.json.TokenStream, align 8
  call fastcc void @std.json.parse(%std.json.TokenStream* %0, %std.json.ParseOptions* undef), !dbg !562
  ret i16 undef
}

declare fastcc void @std.json.TokenStream.init() unnamed_addr

define internal fastcc void @std.json.parse(%std.json.TokenStream* %0, %std.json.ParseOptions* %1) unnamed_addr !dbg !563 {
Entry:
  %tokens = alloca %std.json.TokenStream*, align 8
  store %std.json.TokenStream* %0, %std.json.TokenStream** %tokens, align 8
  %2 = load %std.json.TokenStream*, %std.json.TokenStream** %tokens, align 8, !dbg !652
  call fastcc void @std.json.TokenStream.next(%std.json.TokenStream* %2), !dbg !653
  br label %ErrRetContinue

ErrRetContinue:                                   ; preds = %Entry
  br label %OptionalNonNull

OptionalNonNull:                                  ; preds = %ErrRetContinue
  br label %OptionalEnd, !dbg !654

OptionalEnd:                                      ; preds = %OptionalNonNull
  %3 = load %std.json.TokenStream*, %std.json.TokenStream** %tokens, align 8, !dbg !655
  call fastcc void @std.json.parseInternal({ %Foo, i16 }* undef, %std.json.Token* undef, %std.json.TokenStream* %3, %std.json.ParseOptions* %1), !dbg !656
  br label %ErrRetContinue2

ErrRetContinue2:                                  ; preds = %OptionalEnd
  br label %Then

Then:                                             ; preds = %ErrRetContinue2
  call fastcc void @std.json.TokenStream.next(%std.json.TokenStream* undef), !dbg !657
  ret void
}

; Function Attrs: argmemonly nofree nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #1

declare fastcc void @std.json.TokenStream.next(%std.json.TokenStream*) unnamed_addr

define internal fastcc void @std.json.parseInternal({ %Foo, i16 }* %0, %std.json.Token* %1, %std.json.TokenStream* %2, %std.json.ParseOptions* %3) unnamed_addr !dbg !660 {
Entry:
  %tokens_copy = alloca %std.json.TokenStream, align 8
  %4 = alloca { i32, i16 }, align 4
  %tokens_copy40 = alloca %std.json.TokenStream, align 8
  %tokens = alloca %std.json.TokenStream*, align 8
  store %std.json.TokenStream* %2, %std.json.TokenStream** %tokens, align 8
  %5 = load %std.json.TokenStream*, %std.json.TokenStream** %tokens, align 8, !dbg !683
  %6 = bitcast %std.json.TokenStream* %5 to i8*, !dbg !684
  %7 = bitcast %std.json.TokenStream* %tokens_copy to i8*, !dbg !684
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 160, i1 false), !dbg !684
  call void @llvm.dbg.declare(metadata %std.json.TokenStream* %tokens_copy, metadata !673, metadata !DIExpression()), !dbg !685
  call fastcc void @std.json.parseInternal.6({ i32, i16 }* %4, %std.json.TokenStream* %tokens_copy), !dbg !686
  %8 = getelementptr inbounds { i32, i16 }, { i32, i16 }* %4, i32 0, i32 1, !dbg !687
  %9 = load i16, i16* %8, align 2, !dbg !687
  %10 = icmp ne i16 %9, 0, !dbg !687
  br i1 %10, label %TryElse, label %TryOk, !dbg !687

TryOk:                                            ; preds = %Entry
  %11 = load %std.json.TokenStream*, %std.json.TokenStream** %tokens, align 8, !dbg !688
  %12 = bitcast %std.json.TokenStream* %tokens_copy to i8*, !dbg !690
  %13 = bitcast %std.json.TokenStream* %11 to i8*, !dbg !690
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %12, i64 160, i1 false), !dbg !690
  ret void, !dbg !691

TryElse:                                          ; preds = %Entry
  br label %Else

Else:                                             ; preds = %TryElse
  br label %EndIf, !dbg !692

EndIf:                                            ; preds = %Else
  br label %Else2

Else2:                                            ; preds = %EndIf
  br label %EndIf3, !dbg !694

EndIf3:                                           ; preds = %Else2
  br label %TryEnd, !dbg !687

TryEnd:                                           ; preds = %EndIf3
  call void @llvm.dbg.declare(metadata %std.json.TokenStream* %tokens_copy40, metadata !673, metadata !DIExpression()), !dbg !685
  call fastcc void @std.json.parseInternal.7(%std.json.TokenStream* %tokens_copy40), !dbg !686
  ret void
}

define internal fastcc void @std.json.parseInternal.6({ i32, i16 }* %0, %std.json.TokenStream* %1) unnamed_addr !dbg !695 {
Entry:
  %2 = alloca %"[]u8", align 8
  %3 = alloca { i32, i16 }, align 4
  %tokens = alloca %std.json.TokenStream*, align 8
  store %std.json.TokenStream* %1, %std.json.TokenStream** %tokens, align 8
  %4 = load i4, i4* undef, align 1, !dbg !712
  switch i4 %4, label %SwitchElse [
    i4 5, label %SwitchProng
  ], !dbg !712

SwitchElse:                                       ; preds = %Entry
  ret void, !dbg !713

SwitchProng:                                      ; preds = %Entry
  br label %SwitchEnd, !dbg !712

SwitchEnd:                                        ; preds = %SwitchProng
  br label %Then

Then:                                             ; preds = %SwitchEnd
  %5 = load %std.json.TokenStream*, %std.json.TokenStream** %tokens, align 8, !dbg !714
  %6 = getelementptr inbounds %std.json.TokenStream, %std.json.TokenStream* %5, i32 0, i32 1, !dbg !714
  call fastcc void @"std.json.struct:118:13.slice"(%"[]u8"* %2, %"[]u8"* %6), !dbg !715
  call fastcc void @std.fmt.parseInt({ i32, i16 }* %3, %"[]u8"* %2), !dbg !716
  br label %ErrRetReturn

ErrRetReturn:                                     ; preds = %Then
  %7 = getelementptr inbounds { i32, i16 }, { i32, i16 }* %3, i32 0, i32 1, !dbg !717
  %8 = load i16, i16* %7, align 2, !dbg !717
  %9 = getelementptr inbounds { i32, i16 }, { i32, i16 }* %0, i32 0, i32 1, !dbg !717
  store i16 %8, i16* %9, align 2, !dbg !717
  ret void, !dbg !717
}

declare fastcc void @std.json.parseInternal.7(%std.json.TokenStream*) unnamed_addr

define internal fastcc void @"std.json.struct:118:13.slice"(%"[]u8"* %0, %"[]u8"* %1) unnamed_addr !dbg !718 {
Entry:
  %2 = getelementptr inbounds %"[]u8", %"[]u8"* %1, i32 0, i32 0, !dbg !727
  %3 = load i8*, i8** %2, align 8, !dbg !727
  %4 = getelementptr inbounds i8, i8* %3, i64 undef, !dbg !727
  %5 = getelementptr inbounds %"[]u8", %"[]u8"* %0, i32 0, i32 0, !dbg !727
  store i8* %4, i8** %5, align 8, !dbg !727
  ret void, !dbg !729
}

declare fastcc void @std.fmt.parseInt({ i32, i16 }*, %"[]u8"*) unnamed_addr

attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
attributes #1 = { argmemonly nofree nounwind willreturn }

!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 2, !"Dwarf Version", i32 4}
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "zig 0.10.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !357)
!3 = !DIFile(filename: "test", directory: ".")
!4 = !{!5, !20, !26, !67, !72, !217, !278, !282, !316, !328, !337, !342, !346}
!5 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.builtin.CompilerBackend", scope: !6, file: !6, line: 695, baseType: !7, size: 64, align: 64, elements: !8)
!6 = !DIFile(filename: "builtin.zig", directory: "/home/andy/Downloads/zig/lib/std")
!7 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned)
!8 = !{!9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19}
!9 = !DIEnumerator(name: "other", value: 0)
!10 = !DIEnumerator(name: "stage1", value: 1)
!11 = !DIEnumerator(name: "stage2_llvm", value: 2)
!12 = !DIEnumerator(name: "stage2_c", value: 3)
!13 = !DIEnumerator(name: "stage2_wasm", value: 4)
!14 = !DIEnumerator(name: "stage2_arm", value: 5)
!15 = !DIEnumerator(name: "stage2_x86_64", value: 6)
!16 = !DIEnumerator(name: "stage2_aarch64", value: 7)
!17 = !DIEnumerator(name: "stage2_x86", value: 8)
!18 = !DIEnumerator(name: "stage2_riscv64", value: 9)
!19 = !DIEnumerator(name: "stage2_sparc64", value: 10)
!20 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.builtin.OutputMode", scope: !6, file: !6, line: 439, baseType: !21, size: 8, align: 8, elements: !22)
!21 = !DIBasicType(name: "u2", size: 8, encoding: DW_ATE_unsigned)
!22 = !{!23, !24, !25}
!23 = !DIEnumerator(name: "Exe", value: 0)
!24 = !DIEnumerator(name: "Lib", value: 1)
!25 = !DIEnumerator(name: "Obj", value: 2)
!26 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.json.StreamingParser.State", scope: !27, file: !27, line: 250, baseType: !28, size: 8, align: 8, elements: !29)
!27 = !DIFile(filename: "json.zig", directory: "/home/andy/Downloads/zig/lib/std")
!28 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned_char)
!29 = !{!30, !31, !32, !33, !34, !35, !36, !37, !38, !39, !40, !41, !42, !43, !44, !45, !46, !47, !48, !49, !50, !51, !52, !53, !54, !55, !56, !57, !58, !59, !60, !61, !62, !63, !64, !65, !66}
!30 = !DIEnumerator(name: "ObjectSeparator", value: 0)
!31 = !DIEnumerator(name: "ValueEnd", value: 1)
!32 = !DIEnumerator(name: "TopLevelBegin", value: 2)
!33 = !DIEnumerator(name: "TopLevelEnd", value: 3)
!34 = !DIEnumerator(name: "ValueBegin", value: 4)
!35 = !DIEnumerator(name: "ValueBeginNoClosing", value: 5)
!36 = !DIEnumerator(name: "String", value: 6)
!37 = !DIEnumerator(name: "StringUtf8Byte2Of2", value: 7)
!38 = !DIEnumerator(name: "StringUtf8Byte2Of3", value: 8)
!39 = !DIEnumerator(name: "StringUtf8Byte3Of3", value: 9)
!40 = !DIEnumerator(name: "StringUtf8Byte2Of4", value: 10)
!41 = !DIEnumerator(name: "StringUtf8Byte3Of4", value: 11)
!42 = !DIEnumerator(name: "StringUtf8Byte4Of4", value: 12)
!43 = !DIEnumerator(name: "StringEscapeCharacter", value: 13)
!44 = !DIEnumerator(name: "StringEscapeHexUnicode4", value: 14)
!45 = !DIEnumerator(name: "StringEscapeHexUnicode3", value: 15)
!46 = !DIEnumerator(name: "StringEscapeHexUnicode2", value: 16)
!47 = !DIEnumerator(name: "StringEscapeHexUnicode1", value: 17)
!48 = !DIEnumerator(name: "Number", value: 18)
!49 = !DIEnumerator(name: "NumberMaybeDotOrExponent", value: 19)
!50 = !DIEnumerator(name: "NumberMaybeDigitOrDotOrExponent", value: 20)
!51 = !DIEnumerator(name: "NumberFractionalRequired", value: 21)
!52 = !DIEnumerator(name: "NumberFractional", value: 22)
!53 = !DIEnumerator(name: "NumberMaybeExponent", value: 23)
!54 = !DIEnumerator(name: "NumberExponent", value: 24)
!55 = !DIEnumerator(name: "NumberExponentDigitsRequired", value: 25)
!56 = !DIEnumerator(name: "NumberExponentDigits", value: 26)
!57 = !DIEnumerator(name: "TrueLiteral1", value: 27)
!58 = !DIEnumerator(name: "TrueLiteral2", value: 28)
!59 = !DIEnumerator(name: "TrueLiteral3", value: 29)
!60 = !DIEnumerator(name: "FalseLiteral1", value: 30)
!61 = !DIEnumerator(name: "FalseLiteral2", value: 31)
!62 = !DIEnumerator(name: "FalseLiteral3", value: 32)
!63 = !DIEnumerator(name: "FalseLiteral4", value: 33)
!64 = !DIEnumerator(name: "NullLiteral1", value: 34)
!65 = !DIEnumerator(name: "NullLiteral2", value: 35)
!66 = !DIEnumerator(name: "NullLiteral3", value: 36)
!67 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "@typeInfo(std.json.StringEscapes).Union.tag_type.?", scope: !27, file: !27, line: 15, baseType: !68, size: 8, align: 8, elements: !69)
!68 = !DIBasicType(name: "u1", size: 8, encoding: DW_ATE_unsigned)
!69 = !{!70, !71}
!70 = !DIEnumerator(name: "None", value: 0)
!71 = !DIEnumerator(name: "Some", value: 1)
!72 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.target.x86.Feature", scope: !73, file: !73, line: 7, baseType: !28, size: 8, align: 8, elements: !74)
!73 = !DIFile(filename: "x86.zig", directory: "/home/andy/Downloads/zig/lib/std/target")
!74 = !{!75, !76, !77, !78, !79, !80, !81, !82, !83, !84, !85, !86, !87, !88, !89, !90, !91, !92, !93, !94, !95, !96, !97, !98, !99, !100, !101, !102, !103, !104, !105, !106, !107, !108, !109, !110, !111, !112, !113, !114, !115, !116, !117, !118, !119, !120, !121, !122, !123, !124, !125, !126, !127, !128, !129, !130, !131, !132, !133, !134, !135, !136, !137, !138, !139, !140, !141, !142, !143, !144, !145, !146, !147, !148, !149, !150, !151, !152, !153, !154, !155, !156, !157, !158, !159, !160, !161, !162, !163, !164, !165, !166, !167, !168, !169, !170, !171, !172, !173, !174, !175, !176, !177, !178, !179, !180, !181, !182, !183, !184, !185, !186, !187, !188, !189, !190, !191, !192, !193, !194, !195, !196, !197, !198, !199, !200, !201, !202, !203, !204, !205, !206, !207, !208, !209, !210, !211, !212, !213, !214, !215, !216}
!75 = !DIEnumerator(name: "16bit_mode", value: 0)
!76 = !DIEnumerator(name: "32bit_mode", value: 1)
!77 = !DIEnumerator(name: "3dnow", value: 2)
!78 = !DIEnumerator(name: "3dnowa", value: 3)
!79 = !DIEnumerator(name: "64bit", value: 4)
!80 = !DIEnumerator(name: "adx", value: 5)
!81 = !DIEnumerator(name: "aes", value: 6)
!82 = !DIEnumerator(name: "amx_bf16", value: 7)
!83 = !DIEnumerator(name: "amx_int8", value: 8)
!84 = !DIEnumerator(name: "amx_tile", value: 9)
!85 = !DIEnumerator(name: "avx", value: 10)
!86 = !DIEnumerator(name: "avx2", value: 11)
!87 = !DIEnumerator(name: "avx512bf16", value: 12)
!88 = !DIEnumerator(name: "avx512bitalg", value: 13)
!89 = !DIEnumerator(name: "avx512bw", value: 14)
!90 = !DIEnumerator(name: "avx512cd", value: 15)
!91 = !DIEnumerator(name: "avx512dq", value: 16)
!92 = !DIEnumerator(name: "avx512er", value: 17)
!93 = !DIEnumerator(name: "avx512f", value: 18)
!94 = !DIEnumerator(name: "avx512ifma", value: 19)
!95 = !DIEnumerator(name: "avx512pf", value: 20)
!96 = !DIEnumerator(name: "avx512vbmi", value: 21)
!97 = !DIEnumerator(name: "avx512vbmi2", value: 22)
!98 = !DIEnumerator(name: "avx512vl", value: 23)
!99 = !DIEnumerator(name: "avx512vnni", value: 24)
!100 = !DIEnumerator(name: "avx512vp2intersect", value: 25)
!101 = !DIEnumerator(name: "avx512vpopcntdq", value: 26)
!102 = !DIEnumerator(name: "avxvnni", value: 27)
!103 = !DIEnumerator(name: "bmi", value: 28)
!104 = !DIEnumerator(name: "bmi2", value: 29)
!105 = !DIEnumerator(name: "branchfusion", value: 30)
!106 = !DIEnumerator(name: "cldemote", value: 31)
!107 = !DIEnumerator(name: "clflushopt", value: 32)
!108 = !DIEnumerator(name: "clwb", value: 33)
!109 = !DIEnumerator(name: "clzero", value: 34)
!110 = !DIEnumerator(name: "cmov", value: 35)
!111 = !DIEnumerator(name: "cx16", value: 36)
!112 = !DIEnumerator(name: "cx8", value: 37)
!113 = !DIEnumerator(name: "enqcmd", value: 38)
!114 = !DIEnumerator(name: "ermsb", value: 39)
!115 = !DIEnumerator(name: "f16c", value: 40)
!116 = !DIEnumerator(name: "false_deps_lzcnt_tzcnt", value: 41)
!117 = !DIEnumerator(name: "false_deps_popcnt", value: 42)
!118 = !DIEnumerator(name: "fast_11bytenop", value: 43)
!119 = !DIEnumerator(name: "fast_15bytenop", value: 44)
!120 = !DIEnumerator(name: "fast_7bytenop", value: 45)
!121 = !DIEnumerator(name: "fast_bextr", value: 46)
!122 = !DIEnumerator(name: "fast_gather", value: 47)
!123 = !DIEnumerator(name: "fast_hops", value: 48)
!124 = !DIEnumerator(name: "fast_lzcnt", value: 49)
!125 = !DIEnumerator(name: "fast_movbe", value: 50)
!126 = !DIEnumerator(name: "fast_scalar_fsqrt", value: 51)
!127 = !DIEnumerator(name: "fast_scalar_shift_masks", value: 52)
!128 = !DIEnumerator(name: "fast_shld_rotate", value: 53)
!129 = !DIEnumerator(name: "fast_variable_crosslane_shuffle", value: 54)
!130 = !DIEnumerator(name: "fast_variable_perlane_shuffle", value: 55)
!131 = !DIEnumerator(name: "fast_vector_fsqrt", value: 56)
!132 = !DIEnumerator(name: "fast_vector_shift_masks", value: 57)
!133 = !DIEnumerator(name: "fma", value: 58)
!134 = !DIEnumerator(name: "fma4", value: 59)
!135 = !DIEnumerator(name: "fsgsbase", value: 60)
!136 = !DIEnumerator(name: "fsrm", value: 61)
!137 = !DIEnumerator(name: "fxsr", value: 62)
!138 = !DIEnumerator(name: "gfni", value: 63)
!139 = !DIEnumerator(name: "hreset", value: 64)
!140 = !DIEnumerator(name: "idivl_to_divb", value: 65)
!141 = !DIEnumerator(name: "idivq_to_divl", value: 66)
!142 = !DIEnumerator(name: "invpcid", value: 67)
!143 = !DIEnumerator(name: "kl", value: 68)
!144 = !DIEnumerator(name: "lea_sp", value: 69)
!145 = !DIEnumerator(name: "lea_uses_ag", value: 70)
!146 = !DIEnumerator(name: "lvi_cfi", value: 71)
!147 = !DIEnumerator(name: "lvi_load_hardening", value: 72)
!148 = !DIEnumerator(name: "lwp", value: 73)
!149 = !DIEnumerator(name: "lzcnt", value: 74)
!150 = !DIEnumerator(name: "macrofusion", value: 75)
!151 = !DIEnumerator(name: "mmx", value: 76)
!152 = !DIEnumerator(name: "movbe", value: 77)
!153 = !DIEnumerator(name: "movdir64b", value: 78)
!154 = !DIEnumerator(name: "movdiri", value: 79)
!155 = !DIEnumerator(name: "mwaitx", value: 80)
!156 = !DIEnumerator(name: "nopl", value: 81)
!157 = !DIEnumerator(name: "pad_short_functions", value: 82)
!158 = !DIEnumerator(name: "pclmul", value: 83)
!159 = !DIEnumerator(name: "pconfig", value: 84)
!160 = !DIEnumerator(name: "pku", value: 85)
!161 = !DIEnumerator(name: "popcnt", value: 86)
!162 = !DIEnumerator(name: "prefer_128_bit", value: 87)
!163 = !DIEnumerator(name: "prefer_256_bit", value: 88)
!164 = !DIEnumerator(name: "prefer_mask_registers", value: 89)
!165 = !DIEnumerator(name: "prefetchwt1", value: 90)
!166 = !DIEnumerator(name: "prfchw", value: 91)
!167 = !DIEnumerator(name: "ptwrite", value: 92)
!168 = !DIEnumerator(name: "rdpid", value: 93)
!169 = !DIEnumerator(name: "rdrnd", value: 94)
!170 = !DIEnumerator(name: "rdseed", value: 95)
!171 = !DIEnumerator(name: "retpoline", value: 96)
!172 = !DIEnumerator(name: "retpoline_external_thunk", value: 97)
!173 = !DIEnumerator(name: "retpoline_indirect_branches", value: 98)
!174 = !DIEnumerator(name: "retpoline_indirect_calls", value: 99)
!175 = !DIEnumerator(name: "rtm", value: 100)
!176 = !DIEnumerator(name: "sahf", value: 101)
!177 = !DIEnumerator(name: "serialize", value: 102)
!178 = !DIEnumerator(name: "seses", value: 103)
!179 = !DIEnumerator(name: "sgx", value: 104)
!180 = !DIEnumerator(name: "sha", value: 105)
!181 = !DIEnumerator(name: "shstk", value: 106)
!182 = !DIEnumerator(name: "slow_3ops_lea", value: 107)
!183 = !DIEnumerator(name: "slow_incdec", value: 108)
!184 = !DIEnumerator(name: "slow_lea", value: 109)
!185 = !DIEnumerator(name: "slow_pmaddwd", value: 110)
!186 = !DIEnumerator(name: "slow_pmulld", value: 111)
!187 = !DIEnumerator(name: "slow_shld", value: 112)
!188 = !DIEnumerator(name: "slow_two_mem_ops", value: 113)
!189 = !DIEnumerator(name: "slow_unaligned_mem_16", value: 114)
!190 = !DIEnumerator(name: "slow_unaligned_mem_32", value: 115)
!191 = !DIEnumerator(name: "soft_float", value: 116)
!192 = !DIEnumerator(name: "sse", value: 117)
!193 = !DIEnumerator(name: "sse2", value: 118)
!194 = !DIEnumerator(name: "sse3", value: 119)
!195 = !DIEnumerator(name: "sse4_1", value: 120)
!196 = !DIEnumerator(name: "sse4_2", value: 121)
!197 = !DIEnumerator(name: "sse4a", value: 122)
!198 = !DIEnumerator(name: "sse_unaligned_mem", value: 123)
!199 = !DIEnumerator(name: "ssse3", value: 124)
!200 = !DIEnumerator(name: "tbm", value: 125)
!201 = !DIEnumerator(name: "tsxldtrk", value: 126)
!202 = !DIEnumerator(name: "uintr", value: 127)
!203 = !DIEnumerator(name: "use_aa", value: 128)
!204 = !DIEnumerator(name: "use_glm_div_sqrt_costs", value: 129)
!205 = !DIEnumerator(name: "vaes", value: 130)
!206 = !DIEnumerator(name: "vpclmulqdq", value: 131)
!207 = !DIEnumerator(name: "vzeroupper", value: 132)
!208 = !DIEnumerator(name: "waitpkg", value: 133)
!209 = !DIEnumerator(name: "wbnoinvd", value: 134)
!210 = !DIEnumerator(name: "widekl", value: 135)
!211 = !DIEnumerator(name: "x87", value: 136)
!212 = !DIEnumerator(name: "xop", value: 137)
!213 = !DIEnumerator(name: "xsave", value: 138)
!214 = !DIEnumerator(name: "xsavec", value: 139)
!215 = !DIEnumerator(name: "xsaveopt", value: 140)
!216 = !DIEnumerator(name: "xsaves", value: 141)
!217 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.target.Target.Cpu.Arch", scope: !218, file: !218, line: 760, baseType: !219, size: 8, align: 8, elements: !220)
!218 = !DIFile(filename: "target.zig", directory: "/home/andy/Downloads/zig/lib/std")
!219 = !DIBasicType(name: "u6", size: 8, encoding: DW_ATE_unsigned)
!220 = !{!221, !222, !223, !224, !225, !226, !227, !228, !229, !230, !231, !232, !233, !234, !235, !236, !237, !238, !239, !240, !241, !242, !243, !244, !245, !246, !247, !248, !249, !250, !251, !252, !253, !254, !255, !256, !257, !258, !259, !260, !261, !262, !263, !264, !265, !266, !267, !268, !269, !270, !271, !272, !273, !274, !275, !276, !277}
!221 = !DIEnumerator(name: "arm", value: 0)
!222 = !DIEnumerator(name: "armeb", value: 1)
!223 = !DIEnumerator(name: "aarch64", value: 2)
!224 = !DIEnumerator(name: "aarch64_be", value: 3)
!225 = !DIEnumerator(name: "aarch64_32", value: 4)
!226 = !DIEnumerator(name: "arc", value: 5)
!227 = !DIEnumerator(name: "avr", value: 6)
!228 = !DIEnumerator(name: "bpfel", value: 7)
!229 = !DIEnumerator(name: "bpfeb", value: 8)
!230 = !DIEnumerator(name: "csky", value: 9)
!231 = !DIEnumerator(name: "hexagon", value: 10)
!232 = !DIEnumerator(name: "m68k", value: 11)
!233 = !DIEnumerator(name: "mips", value: 12)
!234 = !DIEnumerator(name: "mipsel", value: 13)
!235 = !DIEnumerator(name: "mips64", value: 14)
!236 = !DIEnumerator(name: "mips64el", value: 15)
!237 = !DIEnumerator(name: "msp430", value: 16)
!238 = !DIEnumerator(name: "powerpc", value: 17)
!239 = !DIEnumerator(name: "powerpcle", value: 18)
!240 = !DIEnumerator(name: "powerpc64", value: 19)
!241 = !DIEnumerator(name: "powerpc64le", value: 20)
!242 = !DIEnumerator(name: "r600", value: 21)
!243 = !DIEnumerator(name: "amdgcn", value: 22)
!244 = !DIEnumerator(name: "riscv32", value: 23)
!245 = !DIEnumerator(name: "riscv64", value: 24)
!246 = !DIEnumerator(name: "sparc", value: 25)
!247 = !DIEnumerator(name: "sparc64", value: 26)
!248 = !DIEnumerator(name: "sparcel", value: 27)
!249 = !DIEnumerator(name: "s390x", value: 28)
!250 = !DIEnumerator(name: "tce", value: 29)
!251 = !DIEnumerator(name: "tcele", value: 30)
!252 = !DIEnumerator(name: "thumb", value: 31)
!253 = !DIEnumerator(name: "thumbeb", value: 32)
!254 = !DIEnumerator(name: "i386", value: 33)
!255 = !DIEnumerator(name: "x86_64", value: 34)
!256 = !DIEnumerator(name: "xcore", value: 35)
!257 = !DIEnumerator(name: "nvptx", value: 36)
!258 = !DIEnumerator(name: "nvptx64", value: 37)
!259 = !DIEnumerator(name: "le32", value: 38)
!260 = !DIEnumerator(name: "le64", value: 39)
!261 = !DIEnumerator(name: "amdil", value: 40)
!262 = !DIEnumerator(name: "amdil64", value: 41)
!263 = !DIEnumerator(name: "hsail", value: 42)
!264 = !DIEnumerator(name: "hsail64", value: 43)
!265 = !DIEnumerator(name: "spir", value: 44)
!266 = !DIEnumerator(name: "spir64", value: 45)
!267 = !DIEnumerator(name: "kalimba", value: 46)
!268 = !DIEnumerator(name: "shave", value: 47)
!269 = !DIEnumerator(name: "lanai", value: 48)
!270 = !DIEnumerator(name: "wasm32", value: 49)
!271 = !DIEnumerator(name: "wasm64", value: 50)
!272 = !DIEnumerator(name: "renderscript32", value: 51)
!273 = !DIEnumerator(name: "renderscript64", value: 52)
!274 = !DIEnumerator(name: "ve", value: 53)
!275 = !DIEnumerator(name: "spu_2", value: 54)
!276 = !DIEnumerator(name: "spirv32", value: 55)
!277 = !DIEnumerator(name: "spirv64", value: 56)
!278 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.builtin.Endian", scope: !6, file: !6, line: 425, baseType: !68, size: 8, align: 8, elements: !279)
!279 = !{!280, !281}
!280 = !DIEnumerator(name: "Big", value: 0)
!281 = !DIEnumerator(name: "Little", value: 1)
!282 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "anyerror", baseType: !283, size: 16, align: 16, elements: !284)
!283 = !DIBasicType(name: "u16", size: 16, encoding: DW_ATE_unsigned)
!284 = !{!285, !286, !287, !288, !289, !290, !291, !292, !293, !294, !295, !296, !297, !298, !299, !300, !301, !302, !303, !304, !305, !306, !307, !308, !309, !310, !311, !312, !313, !314, !315}
!285 = !DIEnumerator(name: "(none)", value: 0)
!286 = !DIEnumerator(name: "OutOfMemory", value: 1)
!287 = !DIEnumerator(name: "UnexpectedEndOfJson", value: 2)
!288 = !DIEnumerator(name: "UnexpectedToken", value: 3)
!289 = !DIEnumerator(name: "InvalidNumber", value: 4)
!290 = !DIEnumerator(name: "Overflow", value: 5)
!291 = !DIEnumerator(name: "InvalidEnumTag", value: 6)
!292 = !DIEnumerator(name: "NoUnionMembersMatched", value: 7)
!293 = !DIEnumerator(name: "DuplicateJSONField", value: 8)
!294 = !DIEnumerator(name: "UnexpectedValue", value: 9)
!295 = !DIEnumerator(name: "UnknownField", value: 10)
!296 = !DIEnumerator(name: "MissingField", value: 11)
!297 = !DIEnumerator(name: "AllocatorRequired", value: 12)
!298 = !DIEnumerator(name: "InvalidCharacter", value: 13)
!299 = !DIEnumerator(name: "InvalidTopLevel", value: 14)
!300 = !DIEnumerator(name: "TooManyNestedItems", value: 15)
!301 = !DIEnumerator(name: "TooManyClosingItems", value: 16)
!302 = !DIEnumerator(name: "InvalidValueBegin", value: 17)
!303 = !DIEnumerator(name: "InvalidValueEnd", value: 18)
!304 = !DIEnumerator(name: "UnbalancedBrackets", value: 19)
!305 = !DIEnumerator(name: "UnbalancedBraces", value: 20)
!306 = !DIEnumerator(name: "UnexpectedClosingBracket", value: 21)
!307 = !DIEnumerator(name: "UnexpectedClosingBrace", value: 22)
!308 = !DIEnumerator(name: "InvalidSeparator", value: 23)
!309 = !DIEnumerator(name: "InvalidLiteral", value: 24)
!310 = !DIEnumerator(name: "InvalidEscapeCharacter", value: 25)
!311 = !DIEnumerator(name: "InvalidUnicodeHexSymbol", value: 26)
!312 = !DIEnumerator(name: "InvalidUtf8Byte", value: 27)
!313 = !DIEnumerator(name: "InvalidTopLevelTrailing", value: 28)
!314 = !DIEnumerator(name: "InvalidControlCharacter", value: 29)
!315 = !DIEnumerator(name: "CodepointTooLarge", value: 30)
!316 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "@typeInfo(std.json.Token).Union.tag_type.?", scope: !27, file: !27, line: 94, baseType: !317, size: 8, align: 8, elements: !318)
!317 = !DIBasicType(name: "u4", size: 8, encoding: DW_ATE_unsigned)
!318 = !{!319, !320, !321, !322, !323, !324, !325, !326, !327}
!319 = !DIEnumerator(name: "ObjectBegin", value: 0)
!320 = !DIEnumerator(name: "ObjectEnd", value: 1)
!321 = !DIEnumerator(name: "ArrayBegin", value: 2)
!322 = !DIEnumerator(name: "ArrayEnd", value: 3)
!323 = !DIEnumerator(name: "String", value: 4)
!324 = !DIEnumerator(name: "Number", value: 5)
!325 = !DIEnumerator(name: "True", value: 6)
!326 = !DIEnumerator(name: "False", value: 7)
!327 = !DIEnumerator(name: "Null", value: 8)
!328 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "@typeInfo(Foo).Union.tag_type.?", scope: !329, file: !329, line: 14, baseType: !330, size: 8, align: 8, elements: !331)
!329 = !DIFile(filename: "test.zig", directory: "/home/andy/Downloads/zig/build-llvm13-debug")
!330 = !DIBasicType(name: "u3", size: 8, encoding: DW_ATE_unsigned)
!331 = !{!332, !333, !334, !335, !336}
!332 = !DIEnumerator(name: "int", value: 0)
!333 = !DIEnumerator(name: "float", value: 1)
!334 = !DIEnumerator(name: "third", value: 2)
!335 = !DIEnumerator(name: "fourth", value: 3)
!336 = !DIEnumerator(name: "fifth", value: 4)
!337 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.json.enum:1479:31", scope: !27, file: !27, line: 1479, baseType: !21, size: 8, align: 8, elements: !338)
!338 = !{!339, !340, !341}
!339 = !DIEnumerator(name: "UseFirst", value: 0)
!340 = !DIEnumerator(name: "Error", value: 1)
!341 = !DIEnumerator(name: "UseLast", value: 2)
!342 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.json.AggregateContainerType", scope: !27, file: !27, line: 135, baseType: !68, size: 8, align: 8, elements: !343)
!343 = !{!344, !345}
!344 = !DIEnumerator(name: "object", value: 0)
!345 = !DIEnumerator(name: "array", value: 1)
!346 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "std.ascii.tIndex", scope: !347, file: !347, line: 54, baseType: !330, size: 8, align: 8, elements: !348)
!347 = !DIFile(filename: "ascii.zig", directory: "/home/andy/Downloads/zig/lib/std")
!348 = !{!349, !350, !351, !352, !353, !354, !355, !356}
!349 = !DIEnumerator(name: "Alpha", value: 0)
!350 = !DIEnumerator(name: "Hex", value: 1)
!351 = !DIEnumerator(name: "Space", value: 2)
!352 = !DIEnumerator(name: "Digit", value: 3)
!353 = !DIEnumerator(name: "Lower", value: 4)
!354 = !DIEnumerator(name: "Upper", value: 5)
!355 = !DIEnumerator(name: "Punct", value: 6)
!356 = !DIEnumerator(name: "Graph", value: 7)
!357 = !{!358, !361, !363, !400, !402, !404, !407, !421, !424, !427, !430, !433, !445, !447, !449, !452, !454, !456, !461, !463, !466, !468, !477, !479, !481, !485, !488, !496, !498, !500, !518, !526, !529, !531, !534}
!358 = !DIGlobalVariableExpression(var: !359, expr: !DIExpression())
!359 = distinct !DIGlobalVariable(name: "zig_backend", linkageName: "zig_backend", scope: !360, file: !360, line: 5, type: !5, isLocal: true, isDefinition: true)
!360 = !DIFile(filename: "builtin.zig", directory: "/home/andy/Downloads/zig/build-llvm13-debug/zig-cache/o/6309becea81560bfaf65f54ee5d2488a")
!361 = !DIGlobalVariableExpression(var: !362, expr: !DIExpression())
!362 = distinct !DIGlobalVariable(name: "output_mode", linkageName: "output_mode", scope: !360, file: !360, line: 9, type: !20, isLocal: true, isDefinition: true)
!363 = !DIGlobalVariableExpression(var: !364, expr: !DIExpression())
!364 = distinct !DIGlobalVariable(name: "default_max_nestings", linkageName: "default_max_nestings", scope: !365, file: !27, line: 205, type: !399, isLocal: true, isDefinition: true)
!365 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.StreamingParser", scope: !27, file: !27, line: 204, size: 768, align: 64, elements: !366)
!366 = !{!367, !368, !370, !371, !372, !374, !386, !387, !389, !390, !391}
!367 = !DIDerivedType(tag: DW_TAG_member, name: "state", scope: !365, file: !27, line: 208, baseType: !26, size: 8, align: 8)
!368 = !DIDerivedType(tag: DW_TAG_member, name: "count", scope: !365, file: !27, line: 210, baseType: !369, size: 64, align: 64, offset: 64)
!369 = !DIBasicType(name: "usize", size: 64, encoding: DW_ATE_unsigned)
!370 = !DIDerivedType(tag: DW_TAG_member, name: "after_string_state", scope: !365, file: !27, line: 212, baseType: !26, size: 8, align: 8, offset: 128)
!371 = !DIDerivedType(tag: DW_TAG_member, name: "after_value_state", scope: !365, file: !27, line: 214, baseType: !26, size: 8, align: 8, offset: 136)
!372 = !DIDerivedType(tag: DW_TAG_member, name: "complete", scope: !365, file: !27, line: 216, baseType: !373, size: 8, align: 8, offset: 144)
!373 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
!374 = !DIDerivedType(tag: DW_TAG_member, name: "string_escapes", scope: !365, file: !27, line: 218, baseType: !375, size: 128, align: 64, offset: 192)
!375 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.StringEscapes", scope: !27, file: !27, line: 15, size: 128, align: 64, elements: !376)
!376 = !{!377, !385}
!377 = !DIDerivedType(tag: DW_TAG_member, name: "payload", scope: !375, file: !27, line: 15, baseType: !378, size: 64, align: 64)
!378 = !DICompositeType(tag: DW_TAG_union_type, name: "AnonUnion", scope: !375, file: !27, line: 15, size: 64, align: 64, elements: !379)
!379 = !{!380}
!380 = !DIDerivedType(tag: DW_TAG_member, name: "Some", scope: !375, file: !27, line: 18, baseType: !381, size: 64, align: 64)
!381 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.struct:18:11", scope: !27, file: !27, line: 18, size: 64, align: 64, elements: !382)
!382 = !{!383}
!383 = !DIDerivedType(tag: DW_TAG_member, name: "size_diff", scope: !381, file: !27, line: 19, baseType: !384, size: 64, align: 64)
!384 = !DIBasicType(name: "isize", size: 64, encoding: DW_ATE_signed)
!385 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !375, file: !27, line: 15, baseType: !67, size: 1, align: 8, offset: 64)
!386 = !DIDerivedType(tag: DW_TAG_member, name: "string_last_was_high_surrogate", scope: !365, file: !27, line: 220, baseType: !373, size: 8, align: 8, offset: 320)
!387 = !DIDerivedType(tag: DW_TAG_member, name: "string_unicode_codepoint", scope: !365, file: !27, line: 222, baseType: !388, size: 24, align: 32, offset: 352)
!388 = !DIBasicType(name: "u21", size: 32, encoding: DW_ATE_unsigned)
!389 = !DIDerivedType(tag: DW_TAG_member, name: "sequence_first_byte", scope: !365, file: !27, line: 224, baseType: !28, size: 8, align: 8, offset: 384)
!390 = !DIDerivedType(tag: DW_TAG_member, name: "number_is_integer", scope: !365, file: !27, line: 226, baseType: !373, size: 8, align: 8, offset: 392)
!391 = !DIDerivedType(tag: DW_TAG_member, name: "stack", scope: !365, file: !27, line: 228, baseType: !392, size: 320, align: 64, offset: 448)
!392 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.AggregateContainerStack(256)", scope: !27, file: !27, line: 139, size: 320, align: 64, elements: !393)
!393 = !{!394, !398}
!394 = !DIDerivedType(tag: DW_TAG_member, name: "memory", scope: !392, file: !27, line: 151, baseType: !395, size: 256, align: 64)
!395 = !DICompositeType(tag: DW_TAG_array_type, baseType: !7, size: 256, align: 256, elements: !396)
!396 = !{!397}
!397 = !DISubrange(count: 4, lowerBound: 0)
!398 = !DIDerivedType(tag: DW_TAG_member, name: "len", scope: !392, file: !27, line: 152, baseType: !369, size: 64, align: 64, offset: 256)
!399 = !DIBasicType(name: "u9", size: 16, encoding: DW_ATE_unsigned)
!400 = !DIGlobalVariableExpression(var: !401, expr: !DIExpression())
!401 = distinct !DIGlobalVariable(name: "element_bitcount", linkageName: "element_bitcount", scope: !392, file: !27, line: 142, type: !28, isLocal: true, isDefinition: true)
!402 = !DIGlobalVariableExpression(var: !403, expr: !DIExpression())
!403 = distinct !DIGlobalVariable(name: "element_count", linkageName: "element_count", scope: !392, file: !27, line: 143, type: !369, isLocal: true, isDefinition: true)
!404 = !DIGlobalVariableExpression(var: !405, expr: !DIExpression())
!405 = distinct !DIGlobalVariable(name: "optimize", linkageName: "optimize", scope: !406, file: !406, line: 8, type: !373, isLocal: true, isDefinition: true)
!406 = !DIFile(filename: "parse_float.zig", directory: "/home/andy/Downloads/zig/lib/std/fmt/parse_float")
!407 = !DIGlobalVariableExpression(var: !408, expr: !DIExpression())
!408 = distinct !DIGlobalVariable(name: "max_digits", linkageName: "max_digits", scope: !409, file: !410, line: 61, type: !420, isLocal: true, isDefinition: true)
!409 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.fmt.parse_float.decimal.Decimal(f128)", scope: !410, file: !410, line: 29, size: 92672, align: 64, elements: !411)
!410 = !DIFile(filename: "decimal.zig", directory: "/home/andy/Downloads/zig/lib/std/fmt/parse_float")
!411 = !{!412, !413, !415, !416}
!412 = !DIDerivedType(tag: DW_TAG_member, name: "num_digits", scope: !409, file: !410, line: 70, baseType: !369, size: 64, align: 64)
!413 = !DIDerivedType(tag: DW_TAG_member, name: "decimal_point", scope: !409, file: !410, line: 72, baseType: !414, size: 32, align: 32, offset: 64)
!414 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed)
!415 = !DIDerivedType(tag: DW_TAG_member, name: "truncated", scope: !409, file: !410, line: 74, baseType: !373, size: 8, align: 8, offset: 96)
!416 = !DIDerivedType(tag: DW_TAG_member, name: "digits", scope: !409, file: !410, line: 76, baseType: !417, size: 92512, align: 8, offset: 104)
!417 = !DICompositeType(tag: DW_TAG_array_type, baseType: !28, size: 92512, align: 92512, elements: !418)
!418 = !{!419}
!419 = !DISubrange(count: 11564, lowerBound: 0)
!420 = !DIBasicType(name: "u14", size: 16, encoding: DW_ATE_unsigned)
!421 = !DIGlobalVariableExpression(var: !422, expr: !DIExpression())
!422 = distinct !DIGlobalVariable(name: "min_exponent", linkageName: "min_exponent", scope: !409, file: !410, line: 65, type: !423, isLocal: true, isDefinition: true)
!423 = !DIBasicType(name: "i65", size: 128, encoding: DW_ATE_signed)
!424 = !DIGlobalVariableExpression(var: !425, expr: !DIExpression())
!425 = distinct !DIGlobalVariable(name: "max_exponent", linkageName: "max_exponent", scope: !409, file: !410, line: 66, type: !426, isLocal: true, isDefinition: true)
!426 = !DIBasicType(name: "u13", size: 16, encoding: DW_ATE_unsigned)
!427 = !DIGlobalVariableExpression(var: !428, expr: !DIExpression())
!428 = distinct !DIGlobalVariable(name: "decimal_point_range", linkageName: "decimal_point_range", scope: !409, file: !410, line: 64, type: !429, isLocal: true, isDefinition: true)
!429 = !DIBasicType(name: "u15", size: 16, encoding: DW_ATE_unsigned)
!430 = !DIGlobalVariableExpression(var: !431, expr: !DIExpression())
!431 = distinct !DIGlobalVariable(name: "max_shift", linkageName: "max_shift", scope: !432, file: !432, line: 8, type: !28, isLocal: true, isDefinition: true)
!432 = !DIFile(filename: "convert_slow.zig", directory: "/home/andy/Downloads/zig/lib/std/fmt/parse_float")
!433 = !DIGlobalVariableExpression(var: !434, expr: !DIExpression())
!434 = distinct !DIGlobalVariable(name: "max_digits", linkageName: "max_digits", scope: !435, file: !410, line: 61, type: !444, isLocal: true, isDefinition: true)
!435 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.fmt.parse_float.decimal.Decimal(f64)", scope: !410, file: !410, line: 29, size: 6272, align: 64, elements: !436)
!436 = !{!437, !438, !439, !440}
!437 = !DIDerivedType(tag: DW_TAG_member, name: "num_digits", scope: !435, file: !410, line: 70, baseType: !369, size: 64, align: 64)
!438 = !DIDerivedType(tag: DW_TAG_member, name: "decimal_point", scope: !435, file: !410, line: 72, baseType: !414, size: 32, align: 32, offset: 64)
!439 = !DIDerivedType(tag: DW_TAG_member, name: "truncated", scope: !435, file: !410, line: 74, baseType: !373, size: 8, align: 8, offset: 96)
!440 = !DIDerivedType(tag: DW_TAG_member, name: "digits", scope: !435, file: !410, line: 76, baseType: !441, size: 6144, align: 8, offset: 104)
!441 = !DICompositeType(tag: DW_TAG_array_type, baseType: !28, size: 6144, align: 6144, elements: !442)
!442 = !{!443}
!443 = !DISubrange(count: 768, lowerBound: 0)
!444 = !DIBasicType(name: "u10", size: 16, encoding: DW_ATE_unsigned)
!445 = !DIGlobalVariableExpression(var: !446, expr: !DIExpression())
!446 = distinct !DIGlobalVariable(name: "min_exponent", linkageName: "min_exponent", scope: !435, file: !410, line: 65, type: !423, isLocal: true, isDefinition: true)
!447 = !DIGlobalVariableExpression(var: !448, expr: !DIExpression())
!448 = distinct !DIGlobalVariable(name: "max_exponent", linkageName: "max_exponent", scope: !435, file: !410, line: 66, type: !399, isLocal: true, isDefinition: true)
!449 = !DIGlobalVariableExpression(var: !450, expr: !DIExpression())
!450 = distinct !DIGlobalVariable(name: "decimal_point_range", linkageName: "decimal_point_range", scope: !435, file: !410, line: 64, type: !451, isLocal: true, isDefinition: true)
!451 = !DIBasicType(name: "u11", size: 16, encoding: DW_ATE_unsigned)
!452 = !DIGlobalVariableExpression(var: !453, expr: !DIExpression())
!453 = distinct !DIGlobalVariable(name: "max_digits_without_overflow", linkageName: "max_digits_without_overflow", scope: !409, file: !410, line: 63, type: !28, isLocal: true, isDefinition: true)
!454 = !DIGlobalVariableExpression(var: !455, expr: !DIExpression())
!455 = distinct !DIGlobalVariable(name: "num_powers", linkageName: "num_powers", scope: !432, file: !432, line: 9, type: !28, isLocal: true, isDefinition: true)
!456 = !DIGlobalVariableExpression(var: !457, expr: !DIExpression())
!457 = distinct !DIGlobalVariable(name: "powers", linkageName: "powers", scope: !432, file: !432, line: 10, type: !458, isLocal: true, isDefinition: true)
!458 = !DICompositeType(tag: DW_TAG_array_type, baseType: !28, size: 152, align: 152, elements: !459)
!459 = !{!460}
!460 = !DISubrange(count: 19, lowerBound: 0)
!461 = !DIGlobalVariableExpression(var: !462, expr: !DIExpression())
!462 = distinct !DIGlobalVariable(name: "max_decimal_digits", linkageName: "max_decimal_digits", scope: !409, file: !410, line: 67, type: !28, isLocal: true, isDefinition: true)
!463 = !DIGlobalVariableExpression(var: !464, expr: !DIExpression())
!464 = distinct !DIGlobalVariable(name: "eisel_lemire_smallest_power_of_five", linkageName: "eisel_lemire_smallest_power_of_five", scope: !465, file: !465, line: 189, type: !423, isLocal: true, isDefinition: true)
!465 = !DIFile(filename: "convert_eisel_lemire.zig", directory: "/home/andy/Downloads/zig/lib/std/fmt/parse_float")
!466 = !DIGlobalVariableExpression(var: !467, expr: !DIExpression())
!467 = distinct !DIGlobalVariable(name: "eisel_lemire_largest_power_of_five", linkageName: "eisel_lemire_largest_power_of_five", scope: !465, file: !465, line: 190, type: !399, isLocal: true, isDefinition: true)
!468 = !DIGlobalVariableExpression(var: !469, expr: !DIExpression())
!469 = distinct !DIGlobalVariable(name: "eisel_lemire_table_powers_of_five_128", linkageName: "eisel_lemire_table_powers_of_five_128", scope: !465, file: !465, line: 191, type: !470, isLocal: true, isDefinition: true)
!470 = !DICompositeType(tag: DW_TAG_array_type, baseType: !471, size: 83328, align: 83328, elements: !475)
!471 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.fmt.parse_float.convert_eisel_lemire.U128", scope: !465, file: !465, line: 131, size: 128, align: 64, elements: !472)
!472 = !{!473, !474}
!473 = !DIDerivedType(tag: DW_TAG_member, name: "lo", scope: !471, file: !465, line: 132, baseType: !7, size: 64, align: 64)
!474 = !DIDerivedType(tag: DW_TAG_member, name: "hi", scope: !471, file: !465, line: 133, baseType: !7, size: 64, align: 64, offset: 64)
!475 = !{!476}
!476 = !DISubrange(count: 651, lowerBound: 0)
!477 = !DIGlobalVariableExpression(var: !478, expr: !DIExpression())
!478 = distinct !DIGlobalVariable(name: "max_digits_without_overflow", linkageName: "max_digits_without_overflow", scope: !435, file: !410, line: 63, type: !28, isLocal: true, isDefinition: true)
!479 = !DIGlobalVariableExpression(var: !480, expr: !DIExpression())
!480 = distinct !DIGlobalVariable(name: "max_decimal_digits", linkageName: "max_decimal_digits", scope: !435, file: !410, line: 67, type: !28, isLocal: true, isDefinition: true)
!481 = !DIGlobalVariableExpression(var: !482, expr: !DIExpression())
!482 = distinct !DIGlobalVariable(name: "nan_u128", linkageName: "nan_u128", scope: !483, file: !483, line: 110, type: !484, isLocal: true, isDefinition: true)
!483 = !DIFile(filename: "math.zig", directory: "/home/andy/Downloads/zig/lib/std")
!484 = !DIBasicType(name: "u128", size: 128, encoding: DW_ATE_unsigned)
!485 = !DIGlobalVariableExpression(var: !486, expr: !DIExpression())
!486 = distinct !DIGlobalVariable(name: "nan_f128", linkageName: "nan_f128", scope: !483, file: !483, line: 111, type: !487, isLocal: true, isDefinition: true)
!487 = !DIBasicType(name: "f128", size: 128, encoding: DW_ATE_float)
!488 = !DIGlobalVariableExpression(var: !489, expr: !DIExpression())
!489 = distinct !DIGlobalVariable(name: "needed_bit_count", linkageName: "needed_bit_count", scope: !490, file: !218, line: 643, type: !399, isLocal: true, isDefinition: true)
!490 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.target.Target.Cpu.Feature.Set", scope: !218, file: !218, line: 640, size: 320, align: 64, elements: !491)
!491 = !{!492}
!492 = !DIDerivedType(tag: DW_TAG_member, name: "ints", scope: !490, file: !218, line: 641, baseType: !493, size: 320, align: 64)
!493 = !DICompositeType(tag: DW_TAG_array_type, baseType: !369, size: 320, align: 320, elements: !494)
!494 = !{!495}
!495 = !DISubrange(count: 5, lowerBound: 0)
!496 = !DIGlobalVariableExpression(var: !497, expr: !DIExpression())
!497 = distinct !DIGlobalVariable(name: "byte_count", linkageName: "byte_count", scope: !490, file: !218, line: 644, type: !28, isLocal: true, isDefinition: true)
!498 = !DIGlobalVariableExpression(var: !499, expr: !DIExpression())
!499 = distinct !DIGlobalVariable(name: "usize_count", linkageName: "usize_count", scope: !490, file: !218, line: 645, type: !28, isLocal: true, isDefinition: true)
!500 = !DIGlobalVariableExpression(var: !501, expr: !DIExpression())
!501 = distinct !DIGlobalVariable(name: "skylake", linkageName: "skylake", scope: !502, file: !73, line: 2748, type: !504, isLocal: true, isDefinition: true)
!502 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.target.x86.cpu", scope: !73, file: !73, line: 979, elements: !503)
!503 = !{}
!504 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.target.Target.Cpu.Model", scope: !218, file: !218, line: 1248, size: 640, align: 64, elements: !505)
!505 = !{!506, !512, !517}
!506 = !DIDerivedType(tag: DW_TAG_member, name: "name", scope: !504, file: !218, line: 1249, baseType: !507, size: 128, align: 64)
!507 = !DICompositeType(tag: DW_TAG_structure_type, name: "[]u8", size: 128, align: 64, elements: !508)
!508 = !{!509, !511}
!509 = !DIDerivedType(tag: DW_TAG_member, name: "ptr", scope: !507, baseType: !510, size: 64, align: 64)
!510 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*u8", baseType: !28, size: 64, align: 64)
!511 = !DIDerivedType(tag: DW_TAG_member, name: "len", scope: !507, baseType: !369, size: 64, align: 64, offset: 64)
!512 = !DIDerivedType(tag: DW_TAG_member, name: "llvm_name", scope: !504, file: !218, line: 1250, baseType: !513, size: 136, align: 64, offset: 128)
!513 = !DICompositeType(tag: DW_TAG_structure_type, name: "?[:0]const u8", size: 192, align: 64, elements: !514)
!514 = !{!515, !516}
!515 = !DIDerivedType(tag: DW_TAG_member, name: "val", scope: !513, baseType: !507, size: 128, align: 64)
!516 = !DIDerivedType(tag: DW_TAG_member, name: "maybe", scope: !513, baseType: !373, size: 8, align: 8, offset: 128)
!517 = !DIDerivedType(tag: DW_TAG_member, name: "features", scope: !504, file: !218, line: 1251, baseType: !490, size: 320, align: 64, offset: 320)
!518 = !DIGlobalVariableExpression(var: !519, expr: !DIExpression())
!519 = distinct !DIGlobalVariable(name: "cpu", linkageName: "cpu", scope: !360, file: !360, line: 14, type: !520, isLocal: true, isDefinition: true)
!520 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.target.Target.Cpu", scope: !218, file: !218, line: 609, size: 448, align: 64, elements: !521)
!521 = !{!522, !523, !525}
!522 = !DIDerivedType(tag: DW_TAG_member, name: "arch", scope: !520, file: !218, line: 611, baseType: !217, size: 8, align: 8)
!523 = !DIDerivedType(tag: DW_TAG_member, name: "model", scope: !520, file: !218, line: 615, baseType: !524, size: 64, align: 64, offset: 64)
!524 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.target.Target.Cpu.Model", baseType: !504, size: 64, align: 64)
!525 = !DIDerivedType(tag: DW_TAG_member, name: "features", scope: !520, file: !218, line: 618, baseType: !490, size: 320, align: 64, offset: 128)
!526 = !DIGlobalVariableExpression(var: !527, expr: !DIExpression())
!527 = distinct !DIGlobalVariable(name: "native_endian", linkageName: "native_endian", scope: !528, file: !528, line: 11, type: !278, isLocal: true, isDefinition: true)
!528 = !DIFile(filename: "mem.zig", directory: "/home/andy/Downloads/zig/lib/std")
!529 = !DIGlobalVariableExpression(var: !530, expr: !DIExpression())
!530 = distinct !DIGlobalVariable(name: "nan_u64", linkageName: "nan_u64", scope: !483, file: !483, line: 101, type: !7, isLocal: true, isDefinition: true)
!531 = !DIGlobalVariableExpression(var: !532, expr: !DIExpression())
!532 = distinct !DIGlobalVariable(name: "nan_f64", linkageName: "nan_f64", scope: !483, file: !483, line: 102, type: !533, isLocal: true, isDefinition: true)
!533 = !DIBasicType(name: "f64", size: 64, encoding: DW_ATE_float)
!534 = !DIGlobalVariableExpression(var: !535, expr: !DIExpression())
!535 = distinct !DIGlobalVariable(name: "combinedTable", linkageName: "combinedTable", scope: !347, file: !347, line: 69, type: !536, isLocal: true, isDefinition: true)
!536 = !DICompositeType(tag: DW_TAG_array_type, baseType: !28, size: 2048, align: 2048, elements: !537)
!537 = !{!538}
!538 = !DISubrange(count: 256, lowerBound: 0)
!539 = distinct !DISubprogram(name: "foo", scope: !329, file: !329, line: 9, type: !540, scopeLine: 9, flags: DIFlagStaticMember, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !503)
!540 = !DISubroutineType(types: !541)
!541 = !{null}
!542 = !DILocation(line: 10, column: 13, scope: !543)
!543 = distinct !DILexicalBlock(scope: !539, file: !329, line: 9, column: 22)
!544 = distinct !DISubprogram(name: "fallible", scope: !329, file: !329, line: 13, type: !545, scopeLine: 13, flags: DIFlagStaticMember, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !547)
!545 = !DISubroutineType(types: !546)
!546 = !{!282}
!547 = !{!548}
!548 = !DILocalVariable(name: "rv", scope: !549, file: !329, line: 21, type: !550)
!549 = distinct !DILexicalBlock(scope: !544, file: !329, line: 13, column: 21)
!550 = !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", scope: !329, file: !329, line: 14, size: 128, align: 64, elements: !551)
!551 = !{!552, !561}
!552 = !DIDerivedType(tag: DW_TAG_member, name: "payload", scope: !550, file: !329, line: 14, baseType: !553, size: 64, align: 64)
!553 = !DICompositeType(tag: DW_TAG_union_type, name: "AnonUnion", scope: !550, file: !329, line: 14, size: 64, align: 64, elements: !554)
!554 = !{!555, !557, !558, !559, !560}
!555 = !DIDerivedType(tag: DW_TAG_member, name: "int", scope: !550, file: !329, line: 15, baseType: !556, size: 32, align: 32)
!556 = !DIBasicType(name: "u32", size: 32, encoding: DW_ATE_unsigned)
!557 = !DIDerivedType(tag: DW_TAG_member, name: "float", scope: !550, file: !329, line: 16, baseType: !533, size: 64, align: 64)
!558 = !DIDerivedType(tag: DW_TAG_member, name: "third", scope: !550, file: !329, line: 17, baseType: !369, size: 64, align: 64)
!559 = !DIDerivedType(tag: DW_TAG_member, name: "fourth", scope: !550, file: !329, line: 18, baseType: !384, size: 64, align: 64)
!560 = !DIDerivedType(tag: DW_TAG_member, name: "fifth", scope: !550, file: !329, line: 19, baseType: !384, size: 64, align: 64)
!561 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !550, file: !329, line: 14, baseType: !328, size: 3, align: 8, offset: 64)
!562 = !DILocation(line: 21, column: 34, scope: !549)
!563 = distinct !DISubprogram(name: "std.json.parse", scope: !27, file: !27, line: 1919, type: !564, scopeLine: 1919, flags: DIFlagStaticMember, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !646)
!564 = !DISubroutineType(types: !565)
!565 = !{null, !566, !571, !598}
!566 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.ParseError(Foo)!Foo", baseType: !567, size: 64, align: 64)
!567 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.ParseError(Foo)!Foo", size: 192, align: 192, elements: !568)
!568 = !{!569, !570}
!569 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !567, baseType: !550, size: 128, align: 128)
!570 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !567, baseType: !282, size: 16, align: 16, offset: 128)
!571 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.TokenStream", baseType: !572, size: 64, align: 64)
!572 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.TokenStream", scope: !27, file: !27, line: 1113, size: 1280, align: 64, elements: !573)
!573 = !{!574, !575, !576, !577}
!574 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !572, file: !27, line: 1114, baseType: !369, size: 64, align: 64)
!575 = !DIDerivedType(tag: DW_TAG_member, name: "slice", scope: !572, file: !27, line: 1115, baseType: !507, size: 128, align: 64, offset: 64)
!576 = !DIDerivedType(tag: DW_TAG_member, name: "parser", scope: !572, file: !27, line: 1116, baseType: !365, size: 768, align: 64, offset: 192)
!577 = !DIDerivedType(tag: DW_TAG_member, name: "token", scope: !572, file: !27, line: 1117, baseType: !578, size: 264, align: 64, offset: 960)
!578 = !DICompositeType(tag: DW_TAG_structure_type, name: "?std.json.Token", size: 320, align: 64, elements: !579)
!579 = !{!580, !597}
!580 = !DIDerivedType(tag: DW_TAG_member, name: "val", scope: !578, baseType: !581, size: 256, align: 64)
!581 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.Token", scope: !27, file: !27, line: 94, size: 256, align: 64, elements: !582)
!582 = !{!583, !596}
!583 = !DIDerivedType(tag: DW_TAG_member, name: "payload", scope: !581, file: !27, line: 94, baseType: !584, size: 192, align: 64)
!584 = !DICompositeType(tag: DW_TAG_union_type, name: "AnonUnion", scope: !581, file: !27, line: 94, size: 192, align: 64, elements: !585)
!585 = !{!586, !591}
!586 = !DIDerivedType(tag: DW_TAG_member, name: "String", scope: !581, file: !27, line: 99, baseType: !587, size: 192, align: 64)
!587 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.struct:99:13", scope: !27, file: !27, line: 99, size: 192, align: 64, elements: !588)
!588 = !{!589, !590}
!589 = !DIDerivedType(tag: DW_TAG_member, name: "count", scope: !587, file: !27, line: 101, baseType: !369, size: 64, align: 64)
!590 = !DIDerivedType(tag: DW_TAG_member, name: "escapes", scope: !587, file: !27, line: 104, baseType: !375, size: 128, align: 64, offset: 64)
!591 = !DIDerivedType(tag: DW_TAG_member, name: "Number", scope: !581, file: !27, line: 118, baseType: !592, size: 128, align: 64)
!592 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.struct:118:13", scope: !27, file: !27, line: 118, size: 128, align: 64, elements: !593)
!593 = !{!594, !595}
!594 = !DIDerivedType(tag: DW_TAG_member, name: "count", scope: !592, file: !27, line: 120, baseType: !369, size: 64, align: 64)
!595 = !DIDerivedType(tag: DW_TAG_member, name: "is_integer", scope: !592, file: !27, line: 123, baseType: !373, size: 8, align: 8, offset: 64)
!596 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !581, file: !27, line: 94, baseType: !316, size: 4, align: 8, offset: 192)
!597 = !DIDerivedType(tag: DW_TAG_member, name: "maybe", scope: !578, baseType: !373, size: 8, align: 8, offset: 256)
!598 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.ParseOptions", baseType: !599, size: 64, align: 64)
!599 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.ParseOptions", scope: !27, file: !27, line: 1475, size: 256, align: 64, elements: !600)
!600 = !{!601, !643, !644, !645}
!601 = !DIDerivedType(tag: DW_TAG_member, name: "allocator", scope: !599, file: !27, line: 1476, baseType: !602, size: 136, align: 64)
!602 = !DICompositeType(tag: DW_TAG_structure_type, name: "?std.mem.Allocator", size: 192, align: 64, elements: !603)
!603 = !{!604, !642}
!604 = !DIDerivedType(tag: DW_TAG_member, name: "val", scope: !602, baseType: !605, size: 128, align: 64)
!605 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.mem.Allocator", scope: !606, file: !606, line: 1, size: 128, align: 64, elements: !607)
!606 = !DIFile(filename: "Allocator.zig", directory: "/home/andy/Downloads/zig/lib/std/mem")
!607 = !{!608, !611}
!608 = !DIDerivedType(tag: DW_TAG_member, name: "ptr", scope: !605, file: !606, line: 13, baseType: !609, size: 64, align: 64)
!609 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*anyopaque", baseType: !610, size: 64, align: 64)
!610 = !DICompositeType(tag: DW_TAG_structure_type, name: "anyopaque", flags: DIFlagFwdDecl)
!611 = !DIDerivedType(tag: DW_TAG_member, name: "vtable", scope: !605, file: !606, line: 14, baseType: !612, size: 64, align: 64, offset: 64)
!612 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.mem.Allocator.VTable", baseType: !613, size: 64, align: 64)
!613 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.mem.Allocator.VTable", scope: !606, file: !606, line: 16, size: 192, align: 64, elements: !614)
!614 = !{!615, !626, !637}
!615 = !DIDerivedType(tag: DW_TAG_member, name: "alloc", scope: !613, file: !606, line: 26, baseType: !616, size: 64, align: 64)
!616 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*const fn(*anyopaque, usize, u29, u29, usize) std.mem.Allocator.Error![]u8", baseType: !617, size: 64, align: 64)
!617 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !618, size: 8, align: 8)
!618 = !DISubroutineType(types: !619)
!619 = !{null, !620, !609, !369, !625, !625, !369}
!620 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.mem.Allocator.Error![]u8", baseType: !621, size: 64, align: 64)
!621 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.mem.Allocator.Error![]u8", size: 192, align: 192, elements: !622)
!622 = !{!623, !624}
!623 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !621, baseType: !507, size: 128, align: 128)
!624 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !621, baseType: !282, size: 16, align: 16, offset: 128)
!625 = !DIBasicType(name: "u29", size: 32, encoding: DW_ATE_unsigned)
!626 = !DIDerivedType(tag: DW_TAG_member, name: "resize", scope: !613, file: !606, line: 48, baseType: !627, size: 64, align: 64, offset: 64)
!627 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*const fn(*anyopaque, []u8, u29, usize, u29, usize) ?usize", baseType: !628, size: 64, align: 64)
!628 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !629, size: 8, align: 8)
!629 = !DISubroutineType(types: !630)
!630 = !{null, !631, !609, !636, !625, !369, !625, !369}
!631 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*?usize", baseType: !632, size: 64, align: 64)
!632 = !DICompositeType(tag: DW_TAG_structure_type, name: "?usize", size: 128, align: 64, elements: !633)
!633 = !{!634, !635}
!634 = !DIDerivedType(tag: DW_TAG_member, name: "val", scope: !632, baseType: !369, size: 64, align: 64)
!635 = !DIDerivedType(tag: DW_TAG_member, name: "maybe", scope: !632, baseType: !373, size: 8, align: 8, offset: 64)
!636 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*[]u8", baseType: !507, size: 64, align: 64)
!637 = !DIDerivedType(tag: DW_TAG_member, name: "free", scope: !613, file: !606, line: 58, baseType: !638, size: 64, align: 64, offset: 128)
!638 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*const fn(*anyopaque, []u8, u29, usize) void", baseType: !639, size: 64, align: 64)
!639 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !640, size: 8, align: 8)
!640 = !DISubroutineType(types: !641)
!641 = !{null, !609, !636, !625, !369}
!642 = !DIDerivedType(tag: DW_TAG_member, name: "maybe", scope: !602, baseType: !373, size: 8, align: 8, offset: 128)
!643 = !DIDerivedType(tag: DW_TAG_member, name: "duplicate_field_behavior", scope: !599, file: !27, line: 1479, baseType: !337, size: 8, align: 8, offset: 192)
!644 = !DIDerivedType(tag: DW_TAG_member, name: "ignore_unknown_fields", scope: !599, file: !27, line: 1486, baseType: !373, size: 8, align: 8, offset: 200)
!645 = !DIDerivedType(tag: DW_TAG_member, name: "allow_trailing_data", scope: !599, file: !27, line: 1488, baseType: !373, size: 8, align: 8, offset: 208)
!646 = !{!647, !648, !649, !651}
!647 = !DILocalVariable(name: "tokens", arg: 2, scope: !563, file: !27, line: 1919, type: !571)
!648 = !DILocalVariable(name: "options", arg: 3, scope: !563, file: !27, line: 1919, type: !599)
!649 = !DILocalVariable(name: "token", scope: !650, file: !27, line: 1920, type: !581)
!650 = distinct !DILexicalBlock(scope: !563, file: !27, line: 1919, column: 93)
!651 = !DILocalVariable(name: "r", scope: !650, file: !27, line: 1921, type: !550)
!652 = !DILocation(line: 1920, column: 30, scope: !650)
!653 = !DILocation(line: 1920, column: 35, scope: !650)
!654 = !DILocation(line: 1920, column: 39, scope: !650)
!655 = !DILocation(line: 1921, column: 43, scope: !650)
!656 = !DILocation(line: 1921, column: 32, scope: !650)
!657 = !DILocation(line: 1924, column: 29, scope: !658)
!658 = distinct !DILexicalBlock(scope: !659, file: !27, line: 1923, column: 39)
!659 = distinct !DILexicalBlock(scope: !650, file: !27, line: 1922, column: 5)
!660 = distinct !DISubprogram(name: "std.json.parseInternal", scope: !27, file: !27, line: 1631, type: !661, scopeLine: 1631, flags: DIFlagStaticMember, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !669)
!661 = !DISubroutineType(types: !662)
!662 = !{null, !663, !668, !571, !598}
!663 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.error:1586:37!Foo", baseType: !664, size: 64, align: 64)
!664 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.error:1586:37!Foo", size: 192, align: 192, elements: !665)
!665 = !{!666, !667}
!666 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !664, baseType: !550, size: 128, align: 128)
!667 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !664, baseType: !282, size: 16, align: 16, offset: 128)
!668 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.Token", baseType: !581, size: 64, align: 64)
!669 = !{!670, !671, !672, !673, !678, !679, !673, !680, !679, !673, !681, !679, !673, !682, !679, !673, !682, !679}
!670 = !DILocalVariable(name: "token", arg: 2, scope: !660, file: !27, line: 1633, type: !581)
!671 = !DILocalVariable(name: "tokens", arg: 3, scope: !660, file: !27, line: 1634, type: !571)
!672 = !DILocalVariable(name: "options", arg: 4, scope: !660, file: !27, line: 1635, type: !599)
!673 = !DILocalVariable(name: "tokens_copy", scope: !674, file: !27, line: 1700, type: !572)
!674 = distinct !DILexicalBlock(scope: !675, file: !27, line: 1698, column: 57)
!675 = distinct !DILexicalBlock(scope: !676, file: !27, line: 1696, column: 41)
!676 = distinct !DILexicalBlock(scope: !677, file: !27, line: 1695, column: 31)
!677 = distinct !DILexicalBlock(scope: !660, file: !27, line: 1636, column: 27)
!678 = !DILocalVariable(name: "value", scope: !674, file: !27, line: 1701, type: !556)
!679 = !DILocalVariable(name: "err", scope: !674, file: !27, line: 1701, type: !282)
!680 = !DILocalVariable(name: "value", scope: !674, file: !27, line: 1701, type: !533)
!681 = !DILocalVariable(name: "value", scope: !674, file: !27, line: 1701, type: !369)
!682 = !DILocalVariable(name: "value", scope: !674, file: !27, line: 1701, type: !384)
!683 = !DILocation(line: 1700, column: 39, scope: !674)
!684 = !DILocation(line: 1700, column: 45, scope: !674)
!685 = !DILocation(line: 1700, column: 21, scope: !674)
!686 = !DILocation(line: 1701, column: 38, scope: !674)
!687 = !DILocation(line: 1701, column: 21, scope: !674)
!688 = !DILocation(line: 1702, column: 31, scope: !689)
!689 = distinct !DILexicalBlock(scope: !674, file: !27, line: 1701, column: 98)
!690 = !DILocation(line: 1702, column: 36, scope: !689)
!691 = !DILocation(line: 1703, column: 25, scope: !689)
!692 = !DILocation(line: 1708, column: 25, scope: !693)
!693 = distinct !DILexicalBlock(scope: !674, file: !27, line: 1704, column: 34)
!694 = !DILocation(line: 1710, column: 25, scope: !693)
!695 = distinct !DISubprogram(name: "std.json.parseInternal", scope: !27, file: !27, line: 1631, type: !696, scopeLine: 1631, flags: DIFlagStaticMember, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !703)
!696 = !DISubroutineType(types: !697)
!697 = !{null, !698, !668, !571, !598}
!698 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.ParseInternalErrorImpl(u32,[]const type{})!u32", baseType: !699, size: 64, align: 64)
!699 = !DICompositeType(tag: DW_TAG_structure_type, name: "std.json.ParseInternalErrorImpl(u32,[]const type{})!u32", size: 64, align: 64, elements: !700)
!700 = !{!701, !702}
!701 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !699, baseType: !556, size: 32, align: 32)
!702 = !DIDerivedType(tag: DW_TAG_member, name: "tag", scope: !699, baseType: !282, size: 16, align: 16, offset: 32)
!703 = !{!704, !705, !706, !707, !710, !711}
!704 = !DILocalVariable(name: "token", arg: 2, scope: !695, file: !27, line: 1633, type: !581)
!705 = !DILocalVariable(name: "tokens", arg: 3, scope: !695, file: !27, line: 1634, type: !571)
!706 = !DILocalVariable(name: "options", arg: 4, scope: !695, file: !27, line: 1635, type: !599)
!707 = !DILocalVariable(name: "n", scope: !708, file: !27, line: 1654, type: !592)
!708 = distinct !DILexicalBlock(scope: !709, file: !27, line: 1652, column: 31)
!709 = distinct !DILexicalBlock(scope: !695, file: !27, line: 1636, column: 27)
!710 = !DILocalVariable(name: "numberToken", scope: !708, file: !27, line: 1653, type: !592)
!711 = !DILocalVariable(name: "float", scope: !708, file: !27, line: 1659, type: !487)
!712 = !DILocation(line: 1653, column: 33, scope: !708)
!713 = !DILocation(line: 1655, column: 25, scope: !708)
!714 = !DILocation(line: 1658, column: 72, scope: !708)
!715 = !DILocation(line: 1658, column: 65, scope: !708)
!716 = !DILocation(line: 1658, column: 44, scope: !708)
!717 = !DILocation(line: 1658, column: 24, scope: !708)
!718 = distinct !DISubprogram(name: "std.json.struct:118:13.slice", scope: !592, file: !27, line: 126, type: !719, scopeLine: 126, flags: DIFlagStaticMember, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !723)
!719 = !DISubroutineType(types: !720)
!720 = !{null, !721, !722, !721, !369}
!721 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*[]const u8", baseType: !507, size: 64, align: 64)
!722 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*std.json.struct:118:13", baseType: !592, size: 64, align: 64)
!723 = !{!724, !725, !726}
!724 = !DILocalVariable(name: "self", arg: 2, scope: !718, file: !27, line: 126, type: !592)
!725 = !DILocalVariable(name: "input", arg: 3, scope: !718, file: !27, line: 126, type: !507)
!726 = !DILocalVariable(name: "i", arg: 4, scope: !718, file: !27, line: 126, type: !369)
!727 = !DILocation(line: 127, column: 25, scope: !728)
!728 = distinct !DILexicalBlock(scope: !718, file: !27, line: 126, column: 77)
!729 = !DILocation(line: 127, column: 13, scope: !728)

Reproduce with:

$ ~/local/llvm14-debug/bin/clang -c reduced.ll -O2
clang: /home/andy/Downloads/llvm-project-13/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp:319: void llvm::DbgVariable::addMMIEntry(const llvm::DbgVariable&): Assertion `(FrameIndexExprs.size() == 1 || llvm::all_of(FrameIndexExprs, [](FrameIndexExpr &FIE) { return FIE.Expr && FIE.Expr->isFragment(); })) && "conflicting locations for variable"' failed.

Upstream issue: https://github.com/llvm/llvm-project/issues/56418

Does not occur with stage2.

andrewrk commented 1 year ago

This only affected stage1 and is therefore resolved by e7d28344fa3ee81d6ad7ca5ce1f83d50d8502118. Test coverage in std/json/test.zig.