diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-12-12 21:03:10 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-12-12 21:03:10 +0000 |
commit | 5dd0cef67cff75cce292f2d17a0f048084a54512 (patch) | |
tree | 04469f666ca0ee6847a5b7a0ccf8b24048c0a1ab | |
parent | 3a24b26591ef6a0f19901ddc4fd7931c9297b899 (diff) | |
download | gcc-5dd0cef67cff75cce292f2d17a0f048084a54512.zip gcc-5dd0cef67cff75cce292f2d17a0f048084a54512.tar.gz gcc-5dd0cef67cff75cce292f2d17a0f048084a54512.tar.bz2 |
compiler: Check for nil when slicing pointer to array.
From-SVN: r205942
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 8 |
1 files changed, 8 insertions, 0 deletions
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()) |