authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-26 14:33:10-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-28 14:51:54-05:00
logc8669a4cf834a6d1dadd9260e94f1781ceed0ec3
tree8943f68efa930f659df20762ded55f7a6bb7f222
parentdbe4d72bcfb20fc43713781679a0d23aea0a17d9
signature Commit is signed but in an unrecognized format.

improve debug info for optionals


1 files changed, 12 insertions(+), 20 deletions(-)

src/analyze.cpp+12-20
...@@ -8719,7 +8719,6 @@ static void resolve_llvm_types_optional(CodeGen *g, ZigType *type, ResolveStatus...@@ -8719,7 +8719,6 @@ static void resolve_llvm_types_optional(CodeGen *g, ZigType *type, ResolveStatus
8719 if (ResolveStatusLLVMFwdDecl >= wanted_resolve_status) return;8719 if (ResolveStatusLLVMFwdDecl >= wanted_resolve_status) return;
8720 }8720 }
87218721
8722 LLVMTypeRef child_llvm_type = get_llvm_type(g, child_type);
8723 ZigLLVMDIType *child_llvm_di_type = get_llvm_di_type(g, child_type);8722 ZigLLVMDIType *child_llvm_di_type = get_llvm_di_type(g, child_type);
8724 if (type->data.maybe.resolve_status >= wanted_resolve_status) return;8723 if (type->data.maybe.resolve_status >= wanted_resolve_status) return;
87258724
...@@ -8729,35 +8728,28 @@ static void resolve_llvm_types_optional(CodeGen *g, ZigType *type, ResolveStatus...@@ -8729,35 +8728,28 @@ static void resolve_llvm_types_optional(CodeGen *g, ZigType *type, ResolveStatus
8729 };8728 };
8730 LLVMStructSetBody(type->llvm_type, elem_types, 2, false);8729 LLVMStructSetBody(type->llvm_type, elem_types, 2, false);
87318730
8732 uint64_t val_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, child_llvm_type);8731 uint64_t val_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, type->llvm_type, maybe_child_index);
8733 uint64_t val_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, child_llvm_type);8732 uint64_t maybe_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, type->llvm_type, maybe_null_index);
8734 uint64_t val_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, type->llvm_type, 0);
87358733
8736 uint64_t maybe_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, bool_llvm_type);8734 ZigLLVMDIType *di_element_types[2];
8737 uint64_t maybe_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, bool_llvm_type);8735 di_element_types[maybe_child_index] =
8738 uint64_t maybe_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, type->llvm_type, 1);
8739
8740 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, type->llvm_type);
8741 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, type->llvm_type);
8742
8743 ZigLLVMDIType *di_element_types[] = {
8744 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),8736 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
8745 "val", di_file, line,8737 "val", di_file, line,
8746 val_debug_size_in_bits,8738 8 * child_type->abi_size,
8747 val_debug_align_in_bits,8739 8 * child_type->abi_align,
8748 val_offset_in_bits,8740 val_offset_in_bits,
8749 ZigLLVM_DIFlags_Zero, child_llvm_di_type),8741 ZigLLVM_DIFlags_Zero, child_llvm_di_type);
8742 di_element_types[maybe_null_index] =
8750 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),8743 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
8751 "maybe", di_file, line,8744 "maybe", di_file, line,
8752 maybe_debug_size_in_bits,8745 8*g->builtin_types.entry_bool->abi_size,
8753 maybe_debug_align_in_bits,8746 8*g->builtin_types.entry_bool->abi_align,
8754 maybe_offset_in_bits,8747 maybe_offset_in_bits,
8755 ZigLLVM_DIFlags_Zero, bool_llvm_di_type),8748 ZigLLVM_DIFlags_Zero, bool_llvm_di_type);
8756 };
8757 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,8749 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
8758 compile_unit_scope,8750 compile_unit_scope,
8759 buf_ptr(&type->name),8751 buf_ptr(&type->name),
8760 di_file, line, debug_size_in_bits, debug_align_in_bits, ZigLLVM_DIFlags_Zero,8752 di_file, line, 8 * type->abi_size, 8 * type->abi_align, ZigLLVM_DIFlags_Zero,
8761 nullptr, di_element_types, 2, 0, nullptr, "");8753 nullptr, di_element_types, 2, 0, nullptr, "");
87628754
8763 ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type);8755 ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type);