Patchwork go patch committed: Don't crash on erroneous thunk

login
register
mail settings
Submitter Ian Taylor
Date Feb. 10, 2011, 11:58 p.m.
Message ID <mcrvd0rh26m.fsf@google.com>
Download mbox | patch
Permalink /patch/82697/
State New
Headers show

Comments

Ian Taylor - Feb. 10, 2011, 11:58 p.m.
This patch to the Go compiler avoids a crash on an erroneous thunk.
Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline.

Ian

Patch

diff -r a9fb713eecf6 go/statements.cc
--- a/go/statements.cc	Thu Feb 10 15:41:00 2011 -0800
+++ b/go/statements.cc	Thu Feb 10 15:52:49 2011 -0800
@@ -1776,8 +1776,13 @@ 
 
   // Now that we know the types of the call, build the struct used to
   // pass parameters.
-  Function_type* fntype =
-    this->call_->call_expression()->get_function_type();
+  Call_expression* ce = this->call_->call_expression();
+  if (ce == NULL)
+    {
+      gcc_assert(this->call_->is_error_expression());
+      return;
+    }
+  Function_type* fntype = ce->get_function_type();
   if (fntype != NULL && !this->is_simple(fntype))
     this->struct_type_ = this->build_struct(fntype);
 }
@@ -1788,6 +1793,11 @@ 
 Thunk_statement::do_check_types(Gogo*)
 {
   Call_expression* ce = this->call_->call_expression();
+  if (ce == NULL)
+    {
+      gcc_assert(this->call_->is_error_expression());
+      return;
+    }
   Function_type* fntype = ce->get_function_type();
   if (fntype != NULL && fntype->is_method())
     {