diff options
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index ea09abe..6dca40f 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -9163fa28b89222cd851c0d24bd6a1384d1379c55 +d0a102eea2262e3fca89b1eb342fd03328c4aa16 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/expressions.cc b/gcc/go/gofrontend/expressions.cc index ecb28e0..8d72b1f 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -11766,10 +11766,17 @@ Call_expression::do_add_conversions() Typed_identifier_list::const_iterator pp = fntype->parameters()->begin(); bool is_interface_method = this->fn_->interface_field_reference_expression() != NULL; + size_t argcount = this->args_->size(); if (!is_interface_method && fntype->is_method()) { // Skip the receiver argument, which cannot be interface. pa++; + argcount--; + } + if (argcount != fntype->parameters()->size()) + { + go_assert(saw_errors()); + return; } for (; pa != this->args_->end(); ++pa, ++pp) { @@ -11895,6 +11902,8 @@ Call_expression::is_erroneous_call() Type* Call_expression::do_type() { + if (this->is_error_expression()) + return Type::make_error_type(); if (this->type_ != NULL) return this->type_; |