Commit 98183e4743
Changed files (3)
src/all_types.hpp
@@ -3772,8 +3772,8 @@ static const size_t slice_len_index = 1;
static const size_t maybe_child_index = 0;
static const size_t maybe_null_index = 1;
-static const size_t err_union_err_index = 0;
-static const size_t err_union_payload_index = 1;
+static const size_t err_union_payload_index = 0;
+static const size_t err_union_err_index = 1;
// TODO call graph analysis to find out what this number needs to be for every function
// MUST BE A POWER OF TWO.
src/analyze.cpp
@@ -7017,20 +7017,21 @@ static void resolve_llvm_types_error_union(CodeGen *g, ZigType *type) {
uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, type->llvm_type);
uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, type->llvm_type);
- ZigLLVMDIType *di_element_types[] = {
- ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
+ ZigLLVMDIType *di_element_types[2];
+ di_element_types[err_union_err_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
+ ZigLLVMTypeToScope(type->llvm_di_type),
"tag", di_file, line,
tag_debug_size_in_bits,
tag_debug_align_in_bits,
tag_offset_in_bits,
- ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, err_set_type)),
- ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
+ ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, err_set_type));
+ di_element_types[err_union_payload_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
+ ZigLLVMTypeToScope(type->llvm_di_type),
"value", di_file, line,
value_debug_size_in_bits,
value_debug_align_in_bits,
value_offset_in_bits,
- ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, payload_type)),
- };
+ ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, payload_type));
ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
compile_unit_scope,
src/codegen.cpp
@@ -6437,29 +6437,12 @@ static LLVMValueRef gen_const_val(CodeGen *g, ConstExprValue *const_val, const c
err_payload_value = gen_const_val(g, payload_val, "");
make_unnamed_struct = is_llvm_value_unnamed_type(g, payload_val->type, err_payload_value);
}
+ LLVMValueRef fields[2];
+ fields[err_union_err_index] = err_tag_value;
+ fields[err_union_payload_index] = err_payload_value;
if (make_unnamed_struct) {
- uint64_t payload_off = LLVMOffsetOfElement(g->target_data_ref, get_llvm_type(g, type_entry), 1);
- uint64_t err_sz = LLVMStoreSizeOfType(g->target_data_ref, LLVMTypeOf(err_tag_value));
- unsigned pad_sz = payload_off - err_sz;
- if (pad_sz == 0) {
- LLVMValueRef fields[] = {
- err_tag_value,
- err_payload_value,
- };
- return LLVMConstStruct(fields, 2, false);
- } else {
- LLVMValueRef fields[] = {
- err_tag_value,
- LLVMGetUndef(LLVMArrayType(LLVMInt8Type(), pad_sz)),
- err_payload_value,
- };
- return LLVMConstStruct(fields, 3, false);
- }
+ return LLVMConstStruct(fields, 2, false);
} else {
- LLVMValueRef fields[] = {
- err_tag_value,
- err_payload_value,
- };
return LLVMConstNamedStruct(get_llvm_type(g, type_entry), fields, 2);
}
}