OSDN Git Service

Don't crash on make of slice of erroneous type.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Feb 2011 19:01:25 +0000 (19:01 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Feb 2011 19:01:25 +0000 (19:01 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170019 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/types.cc

index 86efc3b..16563bb 100644 (file)
@@ -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),