Commit 40feecb3e4
Changed files (2)
src
test
cases
src/analyze.cpp
@@ -1272,28 +1272,28 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
if (!type_has_bits(field_type))
continue;
- uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, field_type->type_ref);
- uint64_t debug_align_in_bits = 8*LLVMABIAlignmentOfType(g->target_data_ref, field_type->type_ref);
+ uint64_t store_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, field_type->type_ref);
+ uint64_t preferred_align_in_bits = 8*LLVMPreferredAlignmentOfType(g->target_data_ref, field_type->type_ref);
- assert(debug_size_in_bits > 0);
- assert(debug_align_in_bits > 0);
+ assert(store_size_in_bits > 0);
+ assert(preferred_align_in_bits > 0);
union_inner_di_types[type_enum_field->gen_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
ZigLLVMTypeToScope(enum_type->di_type), buf_ptr(type_enum_field->name),
import->di_file, (unsigned)(field_node->line + 1),
- debug_size_in_bits,
- debug_align_in_bits,
+ store_size_in_bits,
+ preferred_align_in_bits,
0,
0, field_type->di_type);
- biggest_size_in_bits = max(biggest_size_in_bits, debug_size_in_bits);
+ biggest_size_in_bits = max(biggest_size_in_bits, store_size_in_bits);
if (!most_aligned_union_member ||
- debug_align_in_bits > biggest_align_in_bits)
+ preferred_align_in_bits > biggest_align_in_bits)
{
most_aligned_union_member = field_type;
- biggest_align_in_bits = debug_align_in_bits;
- size_of_most_aligned_member_in_bits = debug_size_in_bits;
+ biggest_align_in_bits = preferred_align_in_bits;
+ size_of_most_aligned_member_in_bits = store_size_in_bits;
}
}
@@ -1326,10 +1326,8 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
}
enum_type->data.enumeration.union_type_ref = union_type_ref;
- assert(8*LLVMABIAlignmentOfType(g->target_data_ref, union_type_ref) >=
- biggest_align_in_bits);
- assert(8*LLVMABISizeOfType(g->target_data_ref, union_type_ref) >=
- biggest_size_in_bits);
+ assert(8*LLVMPreferredAlignmentOfType(g->target_data_ref, union_type_ref) >= biggest_align_in_bits);
+ assert(8*LLVMStoreSizeOfType(g->target_data_ref, union_type_ref) >= biggest_size_in_bits);
// create llvm type for root struct
LLVMTypeRef root_struct_element_types[] = {
@@ -1340,7 +1338,7 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
// create debug type for tag
uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type_entry->type_ref);
- uint64_t tag_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, tag_type_entry->type_ref);
+ uint64_t tag_debug_align_in_bits = 8*LLVMPreferredAlignmentOfType(g->target_data_ref, tag_type_entry->type_ref);
ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,
ZigLLVMTypeToScope(enum_type->di_type), "AnonEnum",
import->di_file, (unsigned)(decl_node->line + 1),
test/cases/enum.zig
@@ -123,8 +123,10 @@ const BareNumber = enum {
test "enum alignment" {
- comptime assert(@alignOf(AlignTestEnum) >= @alignOf([9]u8));
- comptime assert(@alignOf(AlignTestEnum) >= @alignOf(u64));
+ comptime {
+ assert(@cAbiAlignOf(AlignTestEnum) >= @cAbiAlignOf([9]u8));
+ assert(@cAbiAlignOf(AlignTestEnum) >= @cAbiAlignOf(u64));
+ }
}
const AlignTestEnum = enum {