This patch to the Go frontend marks some builtin calls with erroneous
as erroneous.  This avoids a compiler crash on invalid code
(http://golang.org/issue/10285).  Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian
diff -r 6780bf5a7069 go/expressions.cc
--- a/go/expressions.cc Mon Mar 30 10:30:44 2015 -0700
+++ b/go/expressions.cc Mon Mar 30 17:07:15 2015 -0700
@@ -7887,7 +7887,10 @@
        Type* arg1_type = args->front()->type();
        Type* arg2_type = args->back()->type();
        if (arg1_type->is_error() || arg2_type->is_error())
-         break;
+         {
+           this->set_is_error();
+           break;
+         }
 
        Type* e1;
        if (arg1_type->is_slice_type())
@@ -7929,7 +7932,10 @@
          }
        if (args->front()->type()->is_error()
            || args->back()->type()->is_error())
-         break;
+         {
+           this->set_is_error();
+           break;
+         }
 
        Array_type* at = args->front()->type()->array_type();
        Type* e = at->element_type();

Reply via email to