[Bug go/80226] ICE gimple-expr.c:474 on Go function returning multiple empty struct/array values

2017-03-28 Thread ian at airs dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80226

Ian Lance Taylor  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |FIXED

--- Comment #3 from Ian Lance Taylor  ---
Fixed.  Thanks.

[Bug go/80226] ICE gimple-expr.c:474 on Go function returning multiple empty struct/array values

2017-03-28 Thread ian at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80226

--- Comment #2 from ian at gcc dot gnu.org  ---
Author: ian
Date: Tue Mar 28 20:08:31 2017
New Revision: 246553

URL: https://gcc.gnu.org/viewcvs?rev=246553=gcc=rev
Log:
PR go/80226
* go-gcc.cc (Gcc_backend::return_statement): Check for
void_type_node when checking result size.

Modified:
trunk/gcc/go/ChangeLog
trunk/gcc/go/go-gcc.cc

[Bug go/80226] ICE gimple-expr.c:474 on Go function returning multiple empty struct/array values

2017-03-27 Thread thanm at google dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80226

--- Comment #1 from Than McIntosh  ---

This seems to do the trick:

diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index ed6fc2c6105..62baa91fab8 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -2081,7 +2081,8 @@ Gcc_backend::return_statement(Bfunction* 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::const_iterator p = vals.begin();