diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-09-16 18:04:22 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-09-16 18:04:22 +0000 |
commit | 5c4802f1e03c96bf95647ec751fc17a4146ade28 (patch) | |
tree | 2e11fbdb63555f55729904e624ae17ce0605c5b9 /gcc/go | |
parent | 48a08d24aeaa92b032d91f74b8b2ed0ee5b1c561 (diff) | |
download | gcc-5c4802f1e03c96bf95647ec751fc17a4146ade28.tar.gz |
compiler: Don't crash on erroneous channel reads.
Fixes golang/go#12320.
Reviewed-on: https://go-review.googlesource.com/13932
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227834 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index fb61c64ea31..c150747ae36 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -79f457a267ff2bf8e65db4bcec0cbc7add79227a +1cb26dc898bda1e85f4dd2ee204adbce792e4813 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 49d4d27071a..542f3de6fbb 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -3472,6 +3472,15 @@ Unsafe_type_conversion_expression::do_get_backend(Translate_context* context) Type* t = this->type_; Type* et = this->expr_->type(); + + if (t->is_error_type() + || this->expr_->is_error_expression() + || et->is_error_type()) + { + go_assert(saw_errors()); + return context->backend()->error_expression(); + } + if (t->array_type() != NULL) go_assert(et->array_type() != NULL && t->is_slice_type() == et->is_slice_type()); |