diff options
| author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-22 16:27:51 +0000 |
|---|---|---|
| committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-22 16:27:51 +0000 |
| commit | df7a26e9d3e82d8f91259cba2e2fbac922b0f1c8 (patch) | |
| tree | 4678163e3f474c3ceb25339023562da57ffe37b6 | |
| parent | 1dde2bdb803c1b12b5e9939937a67197a4e70994 (diff) | |
| download | ppe42-gcc-df7a26e9d3e82d8f91259cba2e2fbac922b0f1c8.tar.gz ppe42-gcc-df7a26e9d3e82d8f91259cba2e2fbac922b0f1c8.zip | |
Don't crash on erroneous channel send or receive.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168174 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/go/gofrontend/gogo-tree.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/gogo-tree.cc b/gcc/go/gofrontend/gogo-tree.cc index 5a6f0792fcc..a5fb5f67589 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)) |

