From d8a99c7c6bce947706eeafbf69ec214845eb4a66 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 17 Dec 2014 01:04:39 +0000 Subject: [PATCH] compiler: Don't crash on append with single argument. Instead of allocating an empty slice literal, use a slice value with a nil pointer. From-SVN: r218806 --- gcc/go/gofrontend/expressions.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 9f68f77dc47..83ee6d923bb 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -6878,7 +6878,11 @@ Builtin_call_expression::do_flatten(Gogo*, Named_object*, ++pa) { if ((*pa)->is_nil_expression()) - *pa = Expression::make_slice_composite_literal(at, NULL, loc); + { + Expression* nil = Expression::make_nil(loc); + Expression* zero = Expression::make_integer_ul(0, NULL, loc); + *pa = Expression::make_slice_value(at, nil, zero, zero, loc); + } if (!(*pa)->is_variable()) { Temporary_statement* temp = @@ -14087,7 +14091,8 @@ class Slice_value_expression : public Expression int Slice_value_expression::do_traverse(Traverse* traverse) { - if (Expression::traverse(&this->valptr_, traverse) == TRAVERSE_EXIT + if (Type::traverse(this->type_, traverse) == TRAVERSE_EXIT + || Expression::traverse(&this->valptr_, traverse) == TRAVERSE_EXIT || Expression::traverse(&this->len_, traverse) == TRAVERSE_EXIT || Expression::traverse(&this->cap_, traverse) == TRAVERSE_EXIT) return TRAVERSE_EXIT; -- 2.30.2