diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 0387ee4fd9f0..022f5ce3f0d1 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -1146,7 +1146,11 @@ Func_expression::get_tree_without_closure(Gogo* gogo) } Named_object* no = this->function_; - tree id = this->function_->get_id(gogo); + + tree id = no->get_id(gogo); + if (id == error_mark_node) + return error_mark_node; + tree fndecl; if (no->is_function()) fndecl = no->func_value()->get_or_make_decl(gogo, no, id); @@ -1155,6 +1159,9 @@ Func_expression::get_tree_without_closure(Gogo* gogo) else gcc_unreachable(); + if (fndecl == error_mark_node) + return error_mark_node; + return build_fold_addr_expr_loc(this->location(), fndecl); } diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index b030a420fe04..8d440a89d4a6 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -6864,6 +6864,8 @@ Named_type::do_get_tree(Gogo* gogo) t = make_node(RECORD_TYPE); this->named_tree_ = t; t = this->type_->interface_type()->fill_in_tree(gogo, t); + if (t == error_mark_node) + return error_mark_node; } break;