From 1f599d751ecacf9bcec4fe5ebaaaa1891d1b820e Mon Sep 17 00:00:00 2001
From: Than McIntosh <thanm@google.com>
Date: Tue, 28 Mar 2017 20:08:31 +0000
Subject: [PATCH] re PR go/80226 (ICE gimple-expr.c:474 on Go function
 returning multiple empty struct/array values)

	PR go/80226
	* go-gcc.cc (Gcc_backend::return_statement): Check for
	void_type_node when checking result size.

From-SVN: r246553
---
 gcc/go/ChangeLog | 6 ++++++
 gcc/go/go-gcc.cc | 3 ++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index 8958f762fcfa..55d78efd9472 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-28  Than McIntosh  <thanm@google.com>
+
+	PR go/80226
+	* go-gcc.cc (Gcc_backend::return_statement): Check for
+	void_type_node when checking result size.
+
 2017-02-20  Ian Lance Taylor  <iant@golang.org>
 
 	PR go/79642
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index ed6fc2c61059..62baa91fab88 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<Bexpression*>::const_iterator p = vals.begin();
-- 
GitLab