This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Go patch committed: Don't crash on erroneous channel operation
- From: Ian Lance Taylor <iant at google dot com>
- To: gcc-patches at gcc dot gnu dot org, gofrontend-dev at googlegroups dot com
- Date: Wed, 22 Dec 2010 08:27:57 -0800
- Subject: Go patch committed: Don't crash on erroneous channel operation
This patch to the Go frontend avoids a crash when doing a channel send
or receive on erroneous values. Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 9634bcdbbbcc go/gogo-tree.cc
--- a/go/gogo-tree.cc Wed Dec 22 08:19:33 2010 -0800
+++ b/go/gogo-tree.cc Wed Dec 22 08:24:30 2010 -0800
@@ -2895,6 +2895,9 @@
Gogo::send_on_channel(tree channel, tree val, bool blocking, bool for_select,
source_location location)
{
+ if (channel == error_mark_node || val == error_mark_node)
+ return error_mark_node;
+
if (int_size_in_bytes(TREE_TYPE(val)) <= 8
&& !AGGREGATE_TYPE_P(TREE_TYPE(val))
&& !FLOAT_TYPE_P(TREE_TYPE(val)))
@@ -3029,6 +3032,9 @@
Gogo::receive_from_channel(tree type_tree, tree channel, bool for_select,
source_location location)
{
+ if (type_tree == error_mark_node || channel == error_mark_node)
+ return error_mark_node;
+
if (int_size_in_bytes(type_tree) <= 8
&& !AGGREGATE_TYPE_P(type_tree)
&& !FLOAT_TYPE_P(type_tree))