aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/expressions.cc5
-rw-r--r--gcc/go/gofrontend/types.cc8
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;