aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2010-12-22 16:27:51 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2010-12-22 16:27:51 +0000
commit2a4eaec2b9463b0783f9505416f13056a69dcac0 (patch)
tree4678163e3f474c3ceb25339023562da57ffe37b6 /gcc/go
parent480cc89916ef34ec51c77b894a5e3781545a1e6c (diff)
downloadgcc-2a4eaec2b9463b0783f9505416f13056a69dcac0.zip
gcc-2a4eaec2b9463b0783f9505416f13056a69dcac0.tar.gz
gcc-2a4eaec2b9463b0783f9505416f13056a69dcac0.tar.bz2
Don't crash on erroneous channel send or receive.
From-SVN: r168174
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/gogo-tree.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/gogo-tree.cc b/gcc/go/gofrontend/gogo-tree.cc
index 5a6f079..a5fb5f6 100644
--- a/gcc/go/gofrontend/gogo-tree.cc
+++ b/gcc/go/gofrontend/gogo-tree.cc
@@ -2895,6 +2895,9 @@ tree
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 @@ tree
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))