| ... | @@ -2643,10 +2643,8 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool | ... | @@ -2643,10 +2643,8 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool |
| 2643 | try uleb128(diw, nav_val.toType().abiAlignment(zcu).toByteUnits().?); | 2643 | try uleb128(diw, nav_val.toType().abiAlignment(zcu).toByteUnits().?); |
| 2644 | for (0..loaded_struct.field_types.len) |field_index| { | 2644 | for (0..loaded_struct.field_types.len) |field_index| { |
| 2645 | const is_comptime = loaded_struct.fieldIsComptime(ip, field_index); | 2645 | const is_comptime = loaded_struct.fieldIsComptime(ip, field_index); |
| 2646 | const field_init = if (loaded_struct.haveFieldInits(ip)) | 2646 | const field_init = loaded_struct.fieldInit(ip, field_index); |
| 2647 | loaded_struct.fieldInit(ip, field_index) | 2647 | assert(!(is_comptime and field_init == .none)); |
| 2648 | else | | |
| 2649 | .none; | | |
| 2650 | try wip_nav.abbrevCode(if (is_comptime) | 2648 | try wip_nav.abbrevCode(if (is_comptime) |
| 2651 | .struct_field_comptime | 2649 | .struct_field_comptime |
| 2652 | else if (field_init != .none) | 2650 | else if (field_init != .none) |
| ... | @@ -2658,20 +2656,14 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool | ... | @@ -2658,20 +2656,14 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool |
| 2658 | defer dwarf.gpa.free(field_name); | 2656 | defer dwarf.gpa.free(field_name); |
| 2659 | try wip_nav.strp(field_name); | 2657 | try wip_nav.strp(field_name); |
| 2660 | } | 2658 | } |
| 2661 | if (is_comptime and field_init == .none) { | 2659 | const field_type = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]); |
| 2662 | // workaround frontend bug | 2660 | try wip_nav.refType(field_type); |
| 2663 | try wip_nav.refType(Type.void); | 2661 | if (!is_comptime) { |
| 2664 | try wip_nav.blockValue(nav_src_loc, Value.void); | 2662 | try uleb128(diw, loaded_struct.offsets.get(ip)[field_index]); |
| 2665 | } else { | 2663 | try uleb128(diw, loaded_struct.fieldAlign(ip, field_index).toByteUnits() orelse |
| 2666 | const field_type = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]); | 2664 | field_type.abiAlignment(zcu).toByteUnits().?); |
| 2667 | try wip_nav.refType(field_type); | | |
| 2668 | if (!is_comptime) { | | |
| 2669 | try uleb128(diw, loaded_struct.offsets.get(ip)[field_index]); | | |
| 2670 | try uleb128(diw, loaded_struct.fieldAlign(ip, field_index).toByteUnits() orelse | | |
| 2671 | field_type.abiAlignment(zcu).toByteUnits().?); | | |
| 2672 | } | | |
| 2673 | if (field_init != .none) try wip_nav.blockValue(nav_src_loc, Value.fromInterned(field_init)); | | |
| 2674 | } | 2665 | } |
| | 2666 | if (field_init != .none) try wip_nav.blockValue(nav_src_loc, Value.fromInterned(field_init)); |
| 2675 | } | 2667 | } |
| 2676 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); | 2668 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); |
| 2677 | } | 2669 | } |
| ... | @@ -3511,10 +3503,8 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP | ... | @@ -3511,10 +3503,8 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP |
| 3511 | try uleb128(diw, ty.abiAlignment(zcu).toByteUnits().?); | 3503 | try uleb128(diw, ty.abiAlignment(zcu).toByteUnits().?); |
| 3512 | for (0..loaded_struct.field_types.len) |field_index| { | 3504 | for (0..loaded_struct.field_types.len) |field_index| { |
| 3513 | const is_comptime = loaded_struct.fieldIsComptime(ip, field_index); | 3505 | const is_comptime = loaded_struct.fieldIsComptime(ip, field_index); |
| 3514 | const field_init = if (loaded_struct.haveFieldInits(ip)) | 3506 | const field_init = loaded_struct.fieldInit(ip, field_index); |
| 3515 | loaded_struct.fieldInit(ip, field_index) | 3507 | assert(!(is_comptime and field_init == .none)); |
| 3516 | else | | |
| 3517 | .none; | | |
| 3518 | try wip_nav.abbrevCode(if (is_comptime) | 3508 | try wip_nav.abbrevCode(if (is_comptime) |
| 3519 | .struct_field_comptime | 3509 | .struct_field_comptime |
| 3520 | else if (field_init != .none) | 3510 | else if (field_init != .none) |
| ... | @@ -3526,20 +3516,14 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP | ... | @@ -3526,20 +3516,14 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP |
| 3526 | defer dwarf.gpa.free(field_name); | 3516 | defer dwarf.gpa.free(field_name); |
| 3527 | try wip_nav.strp(field_name); | 3517 | try wip_nav.strp(field_name); |
| 3528 | } | 3518 | } |
| 3529 | if (is_comptime and field_init == .none) { | 3519 | const field_type = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]); |
| 3530 | // workaround frontend bug | 3520 | try wip_nav.refType(field_type); |
| 3531 | try wip_nav.refType(Type.void); | 3521 | if (!is_comptime) { |
| 3532 | try wip_nav.blockValue(ty_src_loc, Value.void); | 3522 | try uleb128(diw, loaded_struct.offsets.get(ip)[field_index]); |
| 3533 | } else { | 3523 | try uleb128(diw, loaded_struct.fieldAlign(ip, field_index).toByteUnits() orelse |
| 3534 | const field_type = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]); | 3524 | field_type.abiAlignment(zcu).toByteUnits().?); |
| 3535 | try wip_nav.refType(field_type); | | |
| 3536 | if (!is_comptime) { | | |
| 3537 | try uleb128(diw, loaded_struct.offsets.get(ip)[field_index]); | | |
| 3538 | try uleb128(diw, loaded_struct.fieldAlign(ip, field_index).toByteUnits() orelse | | |
| 3539 | field_type.abiAlignment(zcu).toByteUnits().?); | | |
| 3540 | } | | |
| 3541 | if (field_init != .none) try wip_nav.blockValue(ty_src_loc, Value.fromInterned(field_init)); | | |
| 3542 | } | 3525 | } |
| | 3526 | if (field_init != .none) try wip_nav.blockValue(ty_src_loc, Value.fromInterned(field_init)); |
| 3543 | } | 3527 | } |
| 3544 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); | 3528 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); |
| 3545 | } | 3529 | } |
| ... | @@ -3595,10 +3579,8 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP | ... | @@ -3595,10 +3579,8 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP |
| 3595 | try uleb128(diw, ty.abiAlignment(zcu).toByteUnits().?); | 3579 | try uleb128(diw, ty.abiAlignment(zcu).toByteUnits().?); |
| 3596 | for (0..loaded_struct.field_types.len) |field_index| { | 3580 | for (0..loaded_struct.field_types.len) |field_index| { |
| 3597 | const is_comptime = loaded_struct.fieldIsComptime(ip, field_index); | 3581 | const is_comptime = loaded_struct.fieldIsComptime(ip, field_index); |
| 3598 | const field_init = if (loaded_struct.haveFieldInits(ip)) | 3582 | const field_init = loaded_struct.fieldInit(ip, field_index); |
| 3599 | loaded_struct.fieldInit(ip, field_index) | 3583 | assert(!(is_comptime and field_init == .none)); |
| 3600 | else | | |
| 3601 | .none; | | |
| 3602 | try wip_nav.abbrevCode(if (is_comptime) | 3584 | try wip_nav.abbrevCode(if (is_comptime) |
| 3603 | .struct_field_comptime | 3585 | .struct_field_comptime |
| 3604 | else if (field_init != .none) | 3586 | else if (field_init != .none) |
| ... | @@ -3610,20 +3592,14 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP | ... | @@ -3610,20 +3592,14 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP |
| 3610 | defer dwarf.gpa.free(field_name); | 3592 | defer dwarf.gpa.free(field_name); |
| 3611 | try wip_nav.strp(field_name); | 3593 | try wip_nav.strp(field_name); |
| 3612 | } | 3594 | } |
| 3613 | if (is_comptime and field_init == .none) { | 3595 | const field_type = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]); |
| 3614 | // workaround frontend bug | 3596 | try wip_nav.refType(field_type); |
| 3615 | try wip_nav.refType(Type.void); | 3597 | if (!is_comptime) { |
| 3616 | try wip_nav.blockValue(ty_src_loc, Value.void); | 3598 | try uleb128(diw, loaded_struct.offsets.get(ip)[field_index]); |
| 3617 | } else { | 3599 | try uleb128(diw, loaded_struct.fieldAlign(ip, field_index).toByteUnits() orelse |
| 3618 | const field_type = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]); | 3600 | field_type.abiAlignment(zcu).toByteUnits().?); |
| 3619 | try wip_nav.refType(field_type); | | |
| 3620 | if (!is_comptime) { | | |
| 3621 | try uleb128(diw, loaded_struct.offsets.get(ip)[field_index]); | | |
| 3622 | try uleb128(diw, loaded_struct.fieldAlign(ip, field_index).toByteUnits() orelse | | |
| 3623 | field_type.abiAlignment(zcu).toByteUnits().?); | | |
| 3624 | } | | |
| 3625 | if (field_init != .none) try wip_nav.blockValue(ty_src_loc, Value.fromInterned(field_init)); | | |
| 3626 | } | 3601 | } |
| | 3602 | if (field_init != .none) try wip_nav.blockValue(ty_src_loc, Value.fromInterned(field_init)); |
| 3627 | } | 3603 | } |
| 3628 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); | 3604 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); |
| 3629 | } | 3605 | } |