From 38092374b54828c8469b1f5112e1a4e94040f070 Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 12 Dec 2013 21:03:10 +0000 Subject: [PATCH] compiler: Check for nil when slicing pointer to array. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205942 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/go/gofrontend/expressions.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index a5a056b..35bcdbb 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -10259,6 +10259,14 @@ Index_expression::do_lower(Gogo*, Named_object*, Statement_inserter*, int) { Expression* deref = Expression::make_unary(OPERATOR_MULT, left, location); + + // For an ordinary index into the array, the pointer will be + // dereferenced. For a slice it will not--the resulting slice + // will simply reuse the pointer, which is incorrect if that + // pointer is nil. + if (end != NULL || cap != NULL) + deref->issue_nil_check(); + return Expression::make_array_index(deref, start, end, cap, location); } else if (type->is_string_type()) -- 2.7.4