In GCC PR 80226 Than reports a Go frontend crash when compiling a
function that returns multiple zero-sized values.  This patch that he
wrote fixes the problem.  Bootstrapped and ran Go testsuite on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian


2017-03-28  Than McIntosh  <th...@google.com>

PR go/80226
* go-gcc.cc (Gcc_backend::return_statement): Check for
void_type_node when checking result size.
Index: gcc/go/go-gcc.cc
===================================================================
--- gcc/go/go-gcc.cc    (revision 246552)
+++ gcc/go/go-gcc.cc    (working copy)
@@ -2081,7 +2081,8 @@ Gcc_backend::return_statement(Bfunction*
   // If the result size is zero bytes, we have set the function type
   // to have a result type of void, so don't return anything.
   // See the function_type method.
-  if (int_size_in_bytes(TREE_TYPE(result)) == 0)
+  tree res_type = TREE_TYPE(result);
+  if (res_type == void_type_node || int_size_in_bytes(res_type) == 0)
     {
       tree stmt_list = NULL_TREE;
       for (std::vector<Bexpression*>::const_iterator p = vals.begin();

Reply via email to