diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b4c90ef8892fa..9540d16b4c81c 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -c375f3bf470f94220149b486c947bb3eb57cde7d +731941c155214d6158fa800e52ab3225c0b55f73 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 802a17dc0e381..52a1e4da886f7 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -2550,6 +2550,8 @@ Type::backend_type_size(Gogo* gogo, int64_t *psize) { if (!this->is_backend_type_size_known(gogo)) return false; + if (this->is_error_type()) + return false; Btype* bt = this->get_backend_placeholder(gogo); *psize = gogo->backend()->type_size(bt); if (*psize == -1) @@ -6453,7 +6455,7 @@ Array_type::slice_gc_symbol(Gogo* gogo, Expression_list** vals, (*vals)->push_back(Expression::make_integer_ul(opval, uintptr_type, bloc)); (*vals)->push_back(*offset); - if (element_size != 0) + if (element_size != 0 && ok) (*vals)->push_back(Expression::make_gc_symbol(element_type)); this->advance_gc_offset(offset); } @@ -6488,7 +6490,7 @@ Array_type::array_gc_symbol(Gogo* gogo, Expression_list** vals, Type* element_type = this->element_type(); if (bound < 1 || !element_type->has_pointer()) this->advance_gc_offset(offset); - else if (bound == 1 || iwidth <= 4 * pwidth) + else if (ok && (bound == 1 || iwidth <= 4 * pwidth)) { for (unsigned int i = 0; i < bound; ++i) Type::gc_symbol(gogo, element_type, vals, offset, stack_size);