aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-02-10 19:01:25 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-02-10 19:01:25 +0000
commit26d061fc233db50e5b599a10d092dfed8417a023 (patch)
tree1a40152af330f885c3bf7676ea003eec398b9236
parentea4c3e656e251f9a44df38cb54c2334cae58936d (diff)
downloadgcc-26d061fc233db50e5b599a10d092dfed8417a023.zip
gcc-26d061fc233db50e5b599a10d092dfed8417a023.tar.gz
gcc-26d061fc233db50e5b599a10d092dfed8417a023.tar.bz2
Don't crash on make of slice of erroneous type.
From-SVN: r170019
-rw-r--r--gcc/go/gofrontend/types.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc
index 86efc3b..16563bb 100644
--- a/gcc/go/gofrontend/types.cc
+++ b/gcc/go/gofrontend/types.cc
@@ -4565,6 +4565,8 @@ Array_type::do_make_expression_tree(Translate_context* context,
tree element_size_tree = TYPE_SIZE_UNIT(element_type_tree);
tree value = this->element_type_->get_init_tree(gogo, true);
+ if (value == error_mark_node)
+ return error_mark_node;
// The first argument is the number of elements, the optional second
// argument is the capacity.
@@ -4688,7 +4690,7 @@ Array_type::do_make_expression_tree(Translate_context* context,
tree range = build2(RANGE_EXPR, sizetype, size_zero_node, max);
tree space_init = build_constructor_single(array_type, range, value);
- return build2(COMPOUND_EXPR, TREE_TYPE(space),
+ return build2(COMPOUND_EXPR, TREE_TYPE(constructor),
build2(MODIFY_EXPR, void_type_node,
build_fold_indirect_ref(value_pointer),
space_init),