From bc81ddfea67db0b3756027e98cc00bb8fa903a20 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 26 Jul 2016 20:40:11 -0700 Subject: unsigned integers for sizes of things Closes #62. --- src/analyze.cpp | 34 +++++++++++++++++----------------- src/codegen.cpp | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 41 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/analyze.cpp b/src/analyze.cpp index d5a93a3980..f9b85c3fff 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -502,7 +502,7 @@ static void slice_type_common_init(CodeGen *g, TypeTableEntry *child_type, entry->data.structure.fields[0].src_index = 0; entry->data.structure.fields[0].gen_index = 0; entry->data.structure.fields[1].name = buf_create_from_str("len"); - entry->data.structure.fields[1].type_entry = g->builtin_types.entry_isize; + entry->data.structure.fields[1].type_entry = g->builtin_types.entry_usize; entry->data.structure.fields[1].src_index = 1; entry->data.structure.fields[1].gen_index = 1; } @@ -546,7 +546,7 @@ TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bool is_c if (child_type->zero_bits) { LLVMTypeRef element_types[] = { - g->builtin_types.entry_isize->type_ref, + g->builtin_types.entry_usize->type_ref, }; LLVMStructSetBody(entry->type_ref, element_types, 1, false); @@ -556,9 +556,9 @@ TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bool is_c entry->data.structure.fields[0].gen_index = -1; entry->data.structure.fields[1].gen_index = 0; - TypeTableEntry *isize_type = g->builtin_types.entry_isize; - uint64_t len_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, isize_type->type_ref); - uint64_t len_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, isize_type->type_ref); + TypeTableEntry *usize_type = g->builtin_types.entry_usize; + uint64_t len_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, usize_type->type_ref); + uint64_t len_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, usize_type->type_ref); uint64_t len_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 0); uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref); @@ -570,7 +570,7 @@ TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bool is_c len_debug_size_in_bits, len_debug_align_in_bits, len_offset_in_bits, - 0, isize_type->di_type), + 0, usize_type->di_type), }; LLVMZigDIType *replacement_di_type = LLVMZigCreateDebugStructType(g->dbuilder, compile_unit_scope, @@ -586,7 +586,7 @@ TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bool is_c unsigned element_count = 2; LLVMTypeRef element_types[] = { pointer_type->type_ref, - g->builtin_types.entry_isize->type_ref, + g->builtin_types.entry_usize->type_ref, }; LLVMStructSetBody(entry->type_ref, element_types, element_count, false); @@ -597,9 +597,9 @@ TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bool is_c uint64_t ptr_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, pointer_type->type_ref); uint64_t ptr_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 0); - TypeTableEntry *isize_type = g->builtin_types.entry_isize; - uint64_t len_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, isize_type->type_ref); - uint64_t len_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, isize_type->type_ref); + TypeTableEntry *usize_type = g->builtin_types.entry_usize; + uint64_t len_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, usize_type->type_ref); + uint64_t len_debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, usize_type->type_ref); uint64_t len_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, entry->type_ref, 1); uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, entry->type_ref); @@ -617,7 +617,7 @@ TypeTableEntry *get_slice_type(CodeGen *g, TypeTableEntry *child_type, bool is_c len_debug_size_in_bits, len_debug_align_in_bits, len_offset_in_bits, - 0, isize_type->di_type), + 0, usize_type->di_type), }; LLVMZigDIType *replacement_di_type = LLVMZigCreateDebugStructType(g->dbuilder, compile_unit_scope, @@ -2817,10 +2817,10 @@ static TypeTableEntry *analyze_slice_expr(CodeGen *g, ImportTableEntry *import, context->fn_entry->struct_val_expr_alloca_list.append(&node->data.slice_expr.resolved_struct_val_expr); } - analyze_expression(g, import, context, g->builtin_types.entry_isize, node->data.slice_expr.start); + analyze_expression(g, import, context, g->builtin_types.entry_usize, node->data.slice_expr.start); if (node->data.slice_expr.end) { - analyze_expression(g, import, context, g->builtin_types.entry_isize, node->data.slice_expr.end); + analyze_expression(g, import, context, g->builtin_types.entry_usize, node->data.slice_expr.end); } return return_type; @@ -2853,7 +2853,7 @@ static TypeTableEntry *analyze_array_access_expr(CodeGen *g, ImportTableEntry *i return_type = g->builtin_types.entry_invalid; } - analyze_expression(g, import, context, g->builtin_types.entry_isize, node->data.array_access_expr.subscript); + analyze_expression(g, import, context, g->builtin_types.entry_usize, node->data.array_access_expr.subscript); return return_type; } @@ -3912,7 +3912,7 @@ static TypeTableEntry *analyze_array_type(CodeGen *g, ImportTableEntry *import, if (size_node) { TypeTableEntry *size_type = analyze_expression(g, import, context, - g->builtin_types.entry_isize, size_node); + g->builtin_types.entry_usize, size_node); if (size_type->id == TypeTableEntryIdInvalid) { return g->builtin_types.entry_invalid; } @@ -4042,10 +4042,10 @@ static TypeTableEntry *analyze_for_expr(CodeGen *g, ImportTableEntry *import, Bl Buf *index_var_name = &index_var_node->data.symbol_expr.symbol; index_var_node->block_context = child_context; node->data.for_expr.index_var = add_local_var(g, index_var_node, import, child_context, index_var_name, - g->builtin_types.entry_isize, true, nullptr); + g->builtin_types.entry_usize, true, nullptr); } else { node->data.for_expr.index_var = add_local_var(g, node, import, child_context, nullptr, - g->builtin_types.entry_isize, true, nullptr); + g->builtin_types.entry_usize, true, nullptr); } AstNode *for_body_node = node->data.for_expr.body; diff --git a/src/codegen.cpp b/src/codegen.cpp index 55e101fff8..d33c10116a 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -413,7 +413,7 @@ static LLVMValueRef gen_err_name(CodeGen *g, AstNode *node) { } LLVMValueRef indices[] = { - LLVMConstNull(g->builtin_types.entry_isize->type_ref), + LLVMConstNull(g->builtin_types.entry_usize->type_ref), err_val, }; return LLVMBuildInBoundsGEP(g->builder, g->err_name_table, indices, 2, ""); @@ -937,7 +937,7 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) { int len_index = wanted_type->data.structure.fields[1].gen_index; LLVMValueRef len_ptr = LLVMBuildStructGEP(g->builder, cast_expr->tmp_ptr, len_index, ""); - LLVMValueRef len_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, + LLVMValueRef len_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, actual_type->data.array.len, false); LLVMBuildStore(g->builder, len_val, len_ptr); @@ -978,13 +978,13 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) { LLVMValueRef new_len; if (dest_size == 1) { - LLVMValueRef src_size_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, src_size, false); + LLVMValueRef src_size_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, src_size, false); new_len = LLVMBuildMul(g->builder, src_len, src_size_val, ""); } else if (src_size == 1) { - LLVMValueRef dest_size_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, dest_size, false); + LLVMValueRef dest_size_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, dest_size, false); if (want_debug_safety(g, node)) { LLVMValueRef remainder_val = LLVMBuildURem(g->builder, src_len, dest_size_val, ""); - LLVMValueRef zero = LLVMConstNull(g->builtin_types.entry_isize->type_ref); + LLVMValueRef zero = LLVMConstNull(g->builtin_types.entry_usize->type_ref); LLVMValueRef ok_bit = LLVMBuildICmp(g->builder, LLVMIntEQ, remainder_val, zero, ""); LLVMBasicBlockRef ok_block = LLVMAppendBasicBlock(g->cur_fn->fn_value, "SliceWidenOk"); LLVMBasicBlockRef fail_block = LLVMAppendBasicBlock(g->cur_fn->fn_value, "SliceWidenFail"); @@ -1159,12 +1159,12 @@ static LLVMValueRef gen_array_elem_ptr(CodeGen *g, AstNode *source_node, LLVMVal if (array_type->id == TypeTableEntryIdArray) { if (want_debug_safety(g, source_node)) { - LLVMValueRef end = LLVMConstInt(g->builtin_types.entry_isize->type_ref, + LLVMValueRef end = LLVMConstInt(g->builtin_types.entry_usize->type_ref, array_type->data.array.len, false); add_bounds_check(g, source_node, subscript_value, LLVMIntEQ, nullptr, LLVMIntULT, end); } LLVMValueRef indices[] = { - LLVMConstNull(g->builtin_types.entry_isize->type_ref), + LLVMConstNull(g->builtin_types.entry_usize->type_ref), subscript_value }; set_debug_source_node(g, source_node); @@ -1268,13 +1268,13 @@ static LLVMValueRef gen_slice_expr(CodeGen *g, AstNode *node) { if (node->data.slice_expr.end) { end_val = gen_expr(g, node->data.slice_expr.end); } else { - end_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, array_type->data.array.len, false); + end_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, array_type->data.array.len, false); } if (want_debug_safety(g, node)) { add_bounds_check(g, node, start_val, LLVMIntEQ, nullptr, LLVMIntULE, end_val); if (node->data.slice_expr.end) { - LLVMValueRef array_end = LLVMConstInt(g->builtin_types.entry_isize->type_ref, + LLVMValueRef array_end = LLVMConstInt(g->builtin_types.entry_usize->type_ref, array_type->data.array.len, false); add_bounds_check(g, node, end_val, LLVMIntEQ, nullptr, LLVMIntULE, array_end); } @@ -1283,7 +1283,7 @@ static LLVMValueRef gen_slice_expr(CodeGen *g, AstNode *node) { set_debug_source_node(g, node); LLVMValueRef ptr_field_ptr = LLVMBuildStructGEP(g->builder, tmp_struct_ptr, 0, ""); LLVMValueRef indices[] = { - LLVMConstNull(g->builtin_types.entry_isize->type_ref), + LLVMConstNull(g->builtin_types.entry_usize->type_ref), start_val, }; LLVMValueRef slice_start_ptr = LLVMBuildInBoundsGEP(g->builder, array_ptr, indices, 2, ""); @@ -1408,7 +1408,7 @@ static LLVMValueRef gen_field_access_expr(CodeGen *g, AstNode *node, bool is_lva if (struct_type->id == TypeTableEntryIdArray) { Buf *name = &node->data.field_access_expr.field_name; assert(buf_eql_str(name, "len")); - return LLVMConstInt(g->builtin_types.entry_isize->type_ref, + return LLVMConstInt(g->builtin_types.entry_usize->type_ref, struct_type->data.array.len, false); } else if (struct_type->id == TypeTableEntryIdStruct || (struct_type->id == TypeTableEntryIdPointer && struct_type->data.pointer.child_type->id == TypeTableEntryIdStruct)) @@ -2043,7 +2043,7 @@ static LLVMValueRef gen_struct_memcpy(CodeGen *g, AstNode *source_node, LLVMValu LLVMValueRef src_ptr = LLVMBuildBitCast(g->builder, src, ptr_u8, ""); LLVMValueRef dest_ptr = LLVMBuildBitCast(g->builder, dest, ptr_u8, ""); - TypeTableEntry *isize = g->builtin_types.entry_isize; + TypeTableEntry *usize = g->builtin_types.entry_usize; uint64_t size_bytes = LLVMStoreSizeOfType(g->target_data_ref, type_entry->type_ref); uint64_t align_bytes = get_memcpy_align(g, type_entry); assert(size_bytes > 0); @@ -2052,7 +2052,7 @@ static LLVMValueRef gen_struct_memcpy(CodeGen *g, AstNode *source_node, LLVMValu LLVMValueRef params[] = { dest_ptr, // dest pointer src_ptr, // source pointer - LLVMConstInt(isize->type_ref, size_bytes, false), + LLVMConstInt(usize->type_ref, size_bytes, false), LLVMConstInt(LLVMInt32Type(), align_bytes, false), LLVMConstNull(LLVMInt1Type()), // is volatile }; @@ -2871,8 +2871,8 @@ static LLVMValueRef gen_container_init_expr(CodeGen *g, AstNode *node) { LLVMValueRef elem_val = gen_expr(g, field_node); LLVMValueRef indices[] = { - LLVMConstNull(g->builtin_types.entry_isize->type_ref), - LLVMConstInt(g->builtin_types.entry_isize->type_ref, i, false), + LLVMConstNull(g->builtin_types.entry_usize->type_ref), + LLVMConstInt(g->builtin_types.entry_usize->type_ref, i, false), }; set_debug_source_node(g, field_node); LLVMValueRef elem_ptr = LLVMBuildInBoundsGEP(g->builder, tmp_array_ptr, indices, 2, ""); @@ -2989,7 +2989,7 @@ static LLVMValueRef gen_for_expr(CodeGen *g, AstNode *node) { VariableTableEntry *index_var = node->data.for_expr.index_var; assert(index_var); LLVMValueRef index_ptr = index_var->value_ref; - LLVMValueRef one_const = LLVMConstInt(g->builtin_types.entry_isize->type_ref, 1, false); + LLVMValueRef one_const = LLVMConstInt(g->builtin_types.entry_usize->type_ref, 1, false); LLVMBasicBlockRef cond_block = LLVMAppendBasicBlock(g->cur_fn->fn_value, "ForCond"); LLVMBasicBlockRef body_block = LLVMAppendBasicBlock(g->cur_fn->fn_value, "ForBody"); @@ -3005,7 +3005,7 @@ static LLVMValueRef gen_for_expr(CodeGen *g, AstNode *node) { LLVMValueRef len_val; TypeTableEntry *child_type; if (array_type->id == TypeTableEntryIdArray) { - len_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, + len_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, array_type->data.array.len, false); child_type = array_type->data.array.child_type; } else if (array_type->id == TypeTableEntryIdStruct) { @@ -3154,7 +3154,7 @@ static LLVMValueRef gen_var_decl_raw(CodeGen *g, AstNode *source_node, AstNodeVa } } if (!ignore_uninit && want_debug_safety(g, source_node)) { - TypeTableEntry *isize = g->builtin_types.entry_isize; + TypeTableEntry *usize = g->builtin_types.entry_usize; uint64_t size_bytes = LLVMStoreSizeOfType(g->target_data_ref, variable->type->type_ref); uint64_t align_bytes = get_memcpy_align(g, variable->type); @@ -3163,7 +3163,7 @@ static LLVMValueRef gen_var_decl_raw(CodeGen *g, AstNode *source_node, AstNodeVa LLVMTypeRef ptr_u8 = LLVMPointerType(LLVMInt8Type(), 0); LLVMValueRef fill_char = LLVMConstInt(LLVMInt8Type(), 0xaa, false); LLVMValueRef dest_ptr = LLVMBuildBitCast(g->builder, variable->value_ref, ptr_u8, ""); - LLVMValueRef byte_count = LLVMConstInt(isize->type_ref, size_bytes, false); + LLVMValueRef byte_count = LLVMConstInt(usize->type_ref, size_bytes, false); LLVMValueRef align_in_bytes = LLVMConstInt(LLVMInt32Type(), align_bytes, false); LLVMValueRef params[] = { dest_ptr, @@ -3771,7 +3771,7 @@ static LLVMValueRef gen_test_fn_val(CodeGen *g, FnTableEntry *fn_entry) { LLVMSetGlobalConstant(str_global_val, true); LLVMSetUnnamedAddr(str_global_val, true); - LLVMValueRef len_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, buf_len(fn_name), false); + LLVMValueRef len_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, buf_len(fn_name), false); LLVMTypeRef ptr_type = LLVMPointerType(g->builtin_types.entry_u8->type_ref, 0); LLVMValueRef name_fields[] = { @@ -3813,7 +3813,7 @@ static void generate_error_name_table(CodeGen *g) { LLVMValueRef fields[] = { LLVMConstBitCast(str_global, u8_ptr_type->type_ref), - LLVMConstInt(g->builtin_types.entry_isize->type_ref, buf_len(name), false), + LLVMConstInt(g->builtin_types.entry_usize->type_ref, buf_len(name), false), }; values[i] = LLVMConstNamedStruct(str_type->type_ref, fields, 2); } @@ -3986,7 +3986,7 @@ static void do_code_gen(CodeGen *g) { LLVMSetGlobalConstant(test_fn_array_val, true); LLVMSetUnnamedAddr(test_fn_array_val, true); - LLVMValueRef len_val = LLVMConstInt(g->builtin_types.entry_isize->type_ref, g->test_fn_count, false); + LLVMValueRef len_val = LLVMConstInt(g->builtin_types.entry_usize->type_ref, g->test_fn_count, false); LLVMTypeRef ptr_type = LLVMPointerType(LLVMTypeOf(test_fn_vals[0]), 0); LLVMValueRef fields[] = { LLVMConstBitCast(test_fn_array_val, ptr_type), @@ -4611,7 +4611,7 @@ static void define_builtin_fns(CodeGen *g) { builtin_fn->param_types = allocate(builtin_fn->param_count); builtin_fn->param_types[0] = nullptr; // manually checked later builtin_fn->param_types[1] = nullptr; // manually checked later - builtin_fn->param_types[2] = g->builtin_types.entry_isize; + builtin_fn->param_types[2] = g->builtin_types.entry_usize; builtin_fn->ref_count = 1; LLVMTypeRef param_types[] = { @@ -4635,7 +4635,7 @@ static void define_builtin_fns(CodeGen *g) { builtin_fn->param_types = allocate(builtin_fn->param_count); builtin_fn->param_types[0] = nullptr; // manually checked later builtin_fn->param_types[1] = g->builtin_types.entry_u8; - builtin_fn->param_types[2] = g->builtin_types.entry_isize; + builtin_fn->param_types[2] = g->builtin_types.entry_usize; builtin_fn->ref_count = 1; LLVMTypeRef param_types[] = { -- cgit v1.2.3