compiler: avoid a couple of compiler crashes
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 7 Jan 2020 13:44:29 +0000 (13:44 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 7 Jan 2020 13:44:29 +0000 (13:44 +0000)
    These came up while building 1.14beta1 while the code was still invalid.
    The policy is to not bother committing invalid test cases that cause
    compiler crashes.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/213537

From-SVN: r279956

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc

index ea09abe42428d1ac8029d172ad3d0c879127c413..6dca40fe31aa891b5fc5aa45a90bbb66ec4e4a6f 100644 (file)
@@ -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.
index ecb28e0594057ea3c042dd174ab580386f27d03c..8d72b1f478cab5e9f51ebb2baddcf3b66e524d41 100644 (file)
@@ -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_;