| ... | @@ -1524,10 +1524,11 @@ static ZigType *get_struct_type(CodeGen *g, const char *type_name, SrcField fiel | ... | @@ -1524,10 +1524,11 @@ static ZigType *get_struct_type(CodeGen *g, const char *type_name, SrcField fiel |
| 1524 | field->name = buf_create_from_str(fields[i].name); | 1524 | field->name = buf_create_from_str(fields[i].name); |
| 1525 | field->type_entry = fields[i].ty; | 1525 | field->type_entry = fields[i].ty; |
| 1526 | field->src_index = i; | 1526 | field->src_index = i; |
| | 1527 | field->align = fields[i].align; |
| 1527 | | 1528 | |
| 1528 | if (type_has_bits(field->type_entry)) { | 1529 | if (type_has_bits(field->type_entry)) { |
| 1529 | assert(type_is_resolved(field->type_entry, ResolveStatusSizeKnown)); | 1530 | assert(type_is_resolved(field->type_entry, ResolveStatusSizeKnown)); |
| 1530 | unsigned field_abi_align = max(fields[i].align, field->type_entry->abi_align); | 1531 | unsigned field_abi_align = max(field->align, field->type_entry->abi_align); |
| 1531 | if (field_abi_align > abi_align) { | 1532 | if (field_abi_align > abi_align) { |
| 1532 | abi_align = field_abi_align; | 1533 | abi_align = field_abi_align; |
| 1533 | } | 1534 | } |
| ... | @@ -5325,7 +5326,7 @@ static Error resolve_async_frame(CodeGen *g, ZigType *frame_type) { | ... | @@ -5325,7 +5326,7 @@ static Error resolve_async_frame(CodeGen *g, ZigType *frame_type) { |
| 5325 | } | 5326 | } |
| 5326 | instruction->field_index = fields.length; | 5327 | instruction->field_index = fields.length; |
| 5327 | | 5328 | |
| 5328 | fields.append({name, child_type, 0}); | 5329 | fields.append({name, child_type, instruction->align}); |
| 5329 | } | 5330 | } |
| 5330 | | 5331 | |
| 5331 | | 5332 | |
| ... | @@ -6900,9 +6901,16 @@ static void resolve_llvm_types_struct(CodeGen *g, ZigType *struct_type, ResolveS | ... | @@ -6900,9 +6901,16 @@ static void resolve_llvm_types_struct(CodeGen *g, ZigType *struct_type, ResolveS |
| 6900 | if (type_has_bits(struct_type->data.structure.fields[next_src_field_index].type_entry)) | 6901 | if (type_has_bits(struct_type->data.structure.fields[next_src_field_index].type_entry)) |
| 6901 | break; | 6902 | break; |
| 6902 | } | 6903 | } |
| 6903 | size_t next_abi_align = (next_src_field_index == field_count) ? | 6904 | size_t next_abi_align; |
| 6904 | struct_type->abi_align : | 6905 | if (next_src_field_index == field_count) { |
| 6905 | struct_type->data.structure.fields[next_src_field_index].type_entry->abi_align; | 6906 | next_abi_align = struct_type->abi_align; |
| | 6907 | } else { |
| | 6908 | if (struct_type->data.structure.fields[next_src_field_index].align == 0) { |
| | 6909 | next_abi_align = struct_type->data.structure.fields[next_src_field_index].type_entry->abi_align; |
| | 6910 | } else { |
| | 6911 | next_abi_align = struct_type->data.structure.fields[next_src_field_index].align; |
| | 6912 | } |
| | 6913 | } |
| 6906 | size_t llvm_next_abi_align = (next_src_field_index == field_count) ? | 6914 | size_t llvm_next_abi_align = (next_src_field_index == field_count) ? |
| 6907 | llvm_struct_abi_align : | 6915 | llvm_struct_abi_align : |
| 6908 | LLVMABIAlignmentOfType(g->target_data_ref, | 6916 | LLVMABIAlignmentOfType(g->target_data_ref, |