diff options
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 5 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.cc | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index e3a3ab5..f1a2ec7 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -10135,7 +10135,10 @@ Interface_field_reference_expression::do_check_types(Gogo*) Interface_type* interface_type = type->interface_type(); if (interface_type == NULL) - this->report_error(_("expected interface or pointer to interface")); + { + if (!type->is_error_type()) + this->report_error(_("expected interface or pointer to interface")); + } else { const Typed_identifier* method = diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 2eecafd..6ca22cb 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -3464,6 +3464,14 @@ Struct_type::do_verify() p->set_type(Type::make_error_type()); return false; } + if (t->points_to() != NULL + && t->points_to()->interface_type() != NULL) + { + error_at(p->location(), + "embedded type may not be pointer to interface"); + p->set_type(Type::make_error_type()); + return false; + } } } return ret; |