zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 5866032e760dccb585e97d706b7865a720cbbf2c (tree)
parent 38a947c68307cd4bb44efff58cac1897ee1b4197
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Mon, 16 Oct 2017 18:10:28 -0400

fix codegen of enum name table having wrong LLVM types

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

Diffstat:
Msrc/codegen.cpp | 8+++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git 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);