From 1a2e02e267216bb35937d25598c773255d830b25 Mon Sep 17 00:00:00 2001 From: Jimmi HC Date: Wed, 24 Apr 2019 15:04:58 +0200 Subject: fixed #2356 const_ptr_pointee_unchecked did not take into account that if the pointer is zero sized, then const_val->data.x_ptr.special would be ConstPtrSpecialInvalid. This commit fixes this by also checking that the child type of the pointer only have one possible value and just returns that value. --- src/ir.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/ir.cpp') diff --git a/src/ir.cpp b/src/ir.cpp index a3d08b5327..e5192cf347 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -188,6 +188,19 @@ static ConstExprValue *const_ptr_pointee_unchecked(CodeGen *g, ConstExprValue *c assert(get_src_ptr_type(const_val->type) != nullptr); assert(const_val->special == ConstValSpecialStatic); ConstExprValue *result; + + switch (type_has_one_possible_value(g, const_val->type->data.pointer.child_type)) { + case OnePossibleValueInvalid: + zig_unreachable(); + case OnePossibleValueYes: + result = create_const_vals(1); + result->type = const_val->type->data.pointer.child_type; + result->special = ConstValSpecialStatic; + return result; + case OnePossibleValueNo: + break; + } + switch (const_val->data.x_ptr.special) { case ConstPtrSpecialInvalid: zig_unreachable(); -- cgit v1.2.3