authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-10-16 18:10:28-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-10-16 18:10:28-04:00
log5866032e760dccb585e97d706b7865a720cbbf2c
tree446377dd8e054f62b83054d6993a45c03602a0bf
parent38a947c68307cd4bb44efff58cac1897ee1b4197

fix codegen of enum name table having wrong LLVM types

See https://bugs.llvm.org/show_bug.cgi?id=34952

1 files changed, 7 insertions(+), 1 deletions(-)

src/codegen.cpp+7-1
...@@ -4041,6 +4041,12 @@ static void generate_enum_name_tables(CodeGen *g) {...@@ -4041,6 +4041,12 @@ static void generate_enum_name_tables(CodeGen *g) {
4041 TypeTableEntry *u8_ptr_type = get_pointer_to_type(g, g->builtin_types.entry_u8, true);4041 TypeTableEntry *u8_ptr_type = get_pointer_to_type(g, g->builtin_types.entry_u8, true);
4042 TypeTableEntry *str_type = get_slice_type(g, u8_ptr_type);4042 TypeTableEntry *str_type = get_slice_type(g, u8_ptr_type);
40434043
4044 TypeTableEntry *usize = g->builtin_types.entry_usize;
4045 LLVMValueRef array_ptr_indices[] = {
4046 LLVMConstNull(usize->type_ref),
4047 LLVMConstNull(usize->type_ref),
4048 };
4049
40444050
4045 for (size_t enum_i = 0; enum_i < g->name_table_enums.length; enum_i += 1) {4051 for (size_t enum_i = 0; enum_i < g->name_table_enums.length; enum_i += 1) {
4046 TypeTableEntry *enum_tag_type = g->name_table_enums.at(enum_i);4052 TypeTableEntry *enum_tag_type = g->name_table_enums.at(enum_i);
...@@ -4061,7 +4067,7 @@ static void generate_enum_name_tables(CodeGen *g) {...@@ -4061,7 +4067,7 @@ static void generate_enum_name_tables(CodeGen *g) {
4061 LLVMSetAlignment(str_global, LLVMABIAlignmentOfType(g->target_data_ref, LLVMTypeOf(str_init)));4067 LLVMSetAlignment(str_global, LLVMABIAlignmentOfType(g->target_data_ref, LLVMTypeOf(str_init)));
40624068
4063 LLVMValueRef fields[] = {4069 LLVMValueRef fields[] = {
4064 LLVMConstBitCast(str_global, u8_ptr_type->type_ref),4070 LLVMConstGEP(str_global, array_ptr_indices, 2),
4065 LLVMConstInt(g->builtin_types.entry_usize->type_ref, buf_len(name), false),4071 LLVMConstInt(g->builtin_types.entry_usize->type_ref, buf_len(name), false),
4066 };4072 };
4067 values[field_i] = LLVMConstNamedStruct(str_type->type_ref, fields, 2);4073 values[field_i] = LLVMConstNamedStruct(str_type->type_ref, fields, 2);