diff mbox series

Go patch committed: Avoid a couple of compiler crashes

Message ID CAOyqgcVfE-ogjV7At+PFN1p6oxvZ7n579WHg5F_SeAYsXtVTLA@mail.gmail.com
State New
Headers show
Series Go patch committed: Avoid a couple of compiler crashes | expand

Commit Message

Ian Lance Taylor Jan. 7, 2020, 1:44 p.m. UTC
This patch to the Go frontend avoids a couple of compiler crashes.
These came up while building 1.14beta1 while the code was still
invalid.  The general policy is to not bother committing invalid test
cases that cause compiler crashes.  Bootstrapped and ran Go tests on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian
diff mbox series

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 279848)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -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: gcc/go/gofrontend/expressions.cc
===================================================================
--- gcc/go/gofrontend/expressions.cc	(revision 279847)
+++ gcc/go/gofrontend/expressions.cc	(working copy)
@@ -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_;