diff options
| author | gingerBill <bill@gingerbill.org> | 2019-12-22 11:33:33 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2019-12-22 11:33:33 +0000 |
| commit | f62a0891bd65735fca918119725a9938d8169d86 (patch) | |
| tree | d80b4dfa530663c4c8be1b68ae02dbd3bfd33cc8 /src/ir.cpp | |
| parent | 4f2d4716ad763f9d369196612586411a51f63a03 (diff) | |
Fix Crash when compiling for loop with parens around array expression #506
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 790ac5f67..9e21e58bd 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -9674,13 +9674,13 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { } else if (tav.mode == Addressing_Type) { ir_build_range_enum(proc, type_deref(tav.type), val0_type, &val, &key, &loop, &done); } else { - Type *expr_type = type_of_expr(rs->expr); + Type *expr_type = type_of_expr(expr); Type *et = base_type(type_deref(expr_type)); switch (et->kind) { case Type_Map: { is_map = true; gbAllocator a = ir_allocator(); - irAddr const &addr = ir_build_addr(proc, rs->expr); + irAddr const &addr = ir_build_addr(proc, expr); irValue *map = ir_addr_get_ptr(proc, addr); if (is_type_pointer(type_deref(ir_addr_type(addr)))) { map = ir_addr_load(proc, addr); @@ -9692,7 +9692,7 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { } case Type_Array: { irValue *count_ptr = nullptr; - irValue *array = ir_build_addr_ptr(proc, rs->expr); + irValue *array = ir_build_addr_ptr(proc, expr); if (is_type_pointer(type_deref(ir_type(array)))) { array = ir_emit_load(proc, array); } @@ -9703,7 +9703,7 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { } case Type_DynamicArray: { irValue *count_ptr = nullptr; - irValue *array = ir_build_addr_ptr(proc, rs->expr); + irValue *array = ir_build_addr_ptr(proc, expr); if (is_type_pointer(type_deref(ir_type(array)))) { array = ir_emit_load(proc, array); } @@ -9713,7 +9713,7 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { } case Type_Slice: { irValue *count_ptr = nullptr; - irValue *slice = ir_build_expr(proc, rs->expr); + irValue *slice = ir_build_expr(proc, expr); if (is_type_pointer(ir_type(slice))) { count_ptr = ir_emit_struct_ep(proc, slice, 1); slice = ir_emit_load(proc, slice); @@ -9725,7 +9725,7 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { break; } case Type_Basic: { - irValue *string = ir_build_expr(proc, rs->expr); + irValue *string = ir_build_expr(proc, expr); if (is_type_pointer(ir_type(string))) { string = ir_emit_load(proc, string); } @@ -9740,7 +9740,7 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { break; } case Type_Tuple: - ir_build_range_tuple(proc, rs->expr, val0_type, val1_type, &val, &key, &loop, &done); + ir_build_range_tuple(proc, expr, val0_type, val1_type, &val, &key, &loop, &done); break; default: GB_PANIC("Cannot range over %s", type_to_string(expr_type)); |