aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-10-16 18:10:28 -0400
committerAndrew Kelley <superjoe30@gmail.com>2017-10-16 18:10:28 -0400
commit5866032e760dccb585e97d706b7865a720cbbf2c (patch)
tree446377dd8e054f62b83054d6993a45c03602a0bf /src/codegen.cpp
parent38a947c68307cd4bb44efff58cac1897ee1b4197 (diff)
downloadzig-5866032e760dccb585e97d706b7865a720cbbf2c.tar.gz
zig-5866032e760dccb585e97d706b7865a720cbbf2c.zip
fix codegen of enum name table having wrong LLVM types
See https://bugs.llvm.org/show_bug.cgi?id=34952
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index c8e339b8e3..3b508757db 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -4041,6 +4041,12 @@ static void generate_enum_name_tables(CodeGen *g) {
TypeTableEntry *u8_ptr_type = get_pointer_to_type(g, g->builtin_types.entry_u8, true);
TypeTableEntry *str_type = get_slice_type(g, u8_ptr_type);
+ TypeTableEntry *usize = g->builtin_types.entry_usize;
+ LLVMValueRef array_ptr_indices[] = {
+ LLVMConstNull(usize->type_ref),
+ LLVMConstNull(usize->type_ref),
+ };
+
for (size_t enum_i = 0; enum_i < g->name_table_enums.length; enum_i += 1) {
TypeTableEntry *enum_tag_type = g->name_table_enums.at(enum_i);
@@ -4061,7 +4067,7 @@ static void generate_enum_name_tables(CodeGen *g) {
LLVMSetAlignment(str_global, LLVMABIAlignmentOfType(g->target_data_ref, LLVMTypeOf(str_init)));
LLVMValueRef fields[] = {
- LLVMConstBitCast(str_global, u8_ptr_type->type_ref),
+ LLVMConstGEP(str_global, array_ptr_indices, 2),
LLVMConstInt(g->builtin_types.entry_usize->type_ref, buf_len(name), false),
};
values[field_i] = LLVMConstNamedStruct(str_type->type_ref, fields, 2);