From 4d8269f69f530fe251e3132a95285c0af9d3aaab Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 25 Aug 2017 19:53:29 -0400 Subject: fix some casts on const data causing segfault --- src/ir.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/ir.cpp') diff --git a/src/ir.cpp b/src/ir.cpp index 38c16b9a4e..f88612a049 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -7330,7 +7330,7 @@ static void eval_const_expr_implicit_cast(CastOp cast_op, case CastOpResizeSlice: case CastOpBytesToSlice: // can't do it - break; + zig_unreachable(); case CastOpIntToFloat: { assert(new_type->id == TypeTableEntryIdFloat); @@ -7366,7 +7366,9 @@ static void eval_const_expr_implicit_cast(CastOp cast_op, static IrInstruction *ir_resolve_cast(IrAnalyze *ira, IrInstruction *source_instr, IrInstruction *value, TypeTableEntry *wanted_type, CastOp cast_op, bool need_alloca) { - if (value->value.special != ConstValSpecialRuntime) { + if (value->value.special != ConstValSpecialRuntime && + cast_op != CastOpResizeSlice && cast_op != CastOpBytesToSlice) + { IrInstruction *result = ir_create_const(&ira->new_irb, source_instr->scope, source_instr->source_node, wanted_type); eval_const_expr_implicit_cast(cast_op, &value->value, value->value.type, @@ -8166,7 +8168,7 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst } } - // expliict cast from &const [N]T to []const T + // explicit cast from &const [N]T to []const T if (is_slice(wanted_type) && actual_type->id == TypeTableEntryIdPointer && actual_type->data.pointer.is_const && -- cgit v1.2.3