authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-08-26 13:51:51-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-08-26 13:51:51-04:00
log40feecb3e468ca9fc3b5bcbe4b0a4aa30d10f226
treeadcb0db616bda9dd0124e12eebabad258bd79ab1
parent5bc877017ede3b85361a112987757ee277b9c889

fixups from previous commit

See #396

2 files changed, 17 insertions(+), 17 deletions(-)

src/analyze.cpp+13-15
...@@ -1272,28 +1272,28 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {...@@ -1272,28 +1272,28 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
1272 if (!type_has_bits(field_type))1272 if (!type_has_bits(field_type))
1273 continue;1273 continue;
12741274
1275 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, field_type->type_ref);1275 uint64_t store_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, field_type->type_ref);
1276 uint64_t debug_align_in_bits = 8*LLVMABIAlignmentOfType(g->target_data_ref, field_type->type_ref);1276 uint64_t preferred_align_in_bits = 8*LLVMPreferredAlignmentOfType(g->target_data_ref, field_type->type_ref);
12771277
1278 assert(debug_size_in_bits > 0);1278 assert(store_size_in_bits > 0);
1279 assert(debug_align_in_bits > 0);1279 assert(preferred_align_in_bits > 0);
12801280
1281 union_inner_di_types[type_enum_field->gen_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,1281 union_inner_di_types[type_enum_field->gen_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
1282 ZigLLVMTypeToScope(enum_type->di_type), buf_ptr(type_enum_field->name),1282 ZigLLVMTypeToScope(enum_type->di_type), buf_ptr(type_enum_field->name),
1283 import->di_file, (unsigned)(field_node->line + 1),1283 import->di_file, (unsigned)(field_node->line + 1),
1284 debug_size_in_bits,1284 store_size_in_bits,
1285 debug_align_in_bits,1285 preferred_align_in_bits,
1286 0,1286 0,
1287 0, field_type->di_type);1287 0, field_type->di_type);
12881288
1289 biggest_size_in_bits = max(biggest_size_in_bits, debug_size_in_bits);1289 biggest_size_in_bits = max(biggest_size_in_bits, store_size_in_bits);
12901290
1291 if (!most_aligned_union_member ||1291 if (!most_aligned_union_member ||
1292 debug_align_in_bits > biggest_align_in_bits)1292 preferred_align_in_bits > biggest_align_in_bits)
1293 {1293 {
1294 most_aligned_union_member = field_type;1294 most_aligned_union_member = field_type;
1295 biggest_align_in_bits = debug_align_in_bits;1295 biggest_align_in_bits = preferred_align_in_bits;
1296 size_of_most_aligned_member_in_bits = debug_size_in_bits;1296 size_of_most_aligned_member_in_bits = store_size_in_bits;
1297 }1297 }
1298 }1298 }
12991299
...@@ -1326,10 +1326,8 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {...@@ -1326,10 +1326,8 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
1326 }1326 }
1327 enum_type->data.enumeration.union_type_ref = union_type_ref;1327 enum_type->data.enumeration.union_type_ref = union_type_ref;
13281328
1329 assert(8*LLVMABIAlignmentOfType(g->target_data_ref, union_type_ref) >=1329 assert(8*LLVMPreferredAlignmentOfType(g->target_data_ref, union_type_ref) >= biggest_align_in_bits);
1330 biggest_align_in_bits);1330 assert(8*LLVMStoreSizeOfType(g->target_data_ref, union_type_ref) >= biggest_size_in_bits);
1331 assert(8*LLVMABISizeOfType(g->target_data_ref, union_type_ref) >=
1332 biggest_size_in_bits);
13331331
1334 // create llvm type for root struct1332 // create llvm type for root struct
1335 LLVMTypeRef root_struct_element_types[] = {1333 LLVMTypeRef root_struct_element_types[] = {
...@@ -1340,7 +1338,7 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {...@@ -1340,7 +1338,7 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
13401338
1341 // create debug type for tag1339 // create debug type for tag
1342 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type_entry->type_ref);1340 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type_entry->type_ref);
1343 uint64_t tag_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, tag_type_entry->type_ref);1341 uint64_t tag_debug_align_in_bits = 8*LLVMPreferredAlignmentOfType(g->target_data_ref, tag_type_entry->type_ref);
1344 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,1342 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,
1345 ZigLLVMTypeToScope(enum_type->di_type), "AnonEnum",1343 ZigLLVMTypeToScope(enum_type->di_type), "AnonEnum",
1346 import->di_file, (unsigned)(decl_node->line + 1),1344 import->di_file, (unsigned)(decl_node->line + 1),
test/cases/enum.zig+4-2
...@@ -123,8 +123,10 @@ const BareNumber = enum {...@@ -123,8 +123,10 @@ const BareNumber = enum {
123123
124124
125test "enum alignment" {125test "enum alignment" {
126 comptime assert(@alignOf(AlignTestEnum) >= @alignOf([9]u8));126 comptime {
127 comptime assert(@alignOf(AlignTestEnum) >= @alignOf(u64));127 assert(@cAbiAlignOf(AlignTestEnum) >= @cAbiAlignOf([9]u8));
128 assert(@cAbiAlignOf(AlignTestEnum) >= @cAbiAlignOf(u64));
129 }
128}130}
129131
130const AlignTestEnum = enum {132const AlignTestEnum = enum {