diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-07-28 19:58:01 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-07-28 19:58:01 +0000 |
commit | 02c7e7eb5ed750f8ecebc96a29802cdf54c7f01e (patch) | |
tree | 901d4bac7d7deb3b7966c02219fba9ddd73f17d2 /gcc/go | |
parent | 5a427c633be38b90946935236f6f0a5f76fe4c8f (diff) | |
download | gcc-02c7e7eb5ed750f8ecebc96a29802cdf54c7f01e.zip gcc-02c7e7eb5ed750f8ecebc96a29802cdf54c7f01e.tar.gz gcc-02c7e7eb5ed750f8ecebc96a29802cdf54c7f01e.tar.bz2 |
compiler: add backend type conversion
Tweak Interface_field_reference_expression::do_get_backend to apply an
additional backend type conversion to the returned result. This is
needed due to the fact that the top level type of the expression is a
function descriptor, however the value being manufactured is a pointer
to <thunk-descriptor, value> struct.
Reviewed-on: https://go-review.googlesource.com/51712
From-SVN: r250686
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 9dc96cf..685cff9 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -2118958321532352c91fd9406f571f8729a791cd +f7c36b27a49131f60eedde260896d310d735d408 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 79a2f52..eb23ec2 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -12057,12 +12057,15 @@ Interface_field_reference_expression::do_get_backend(Translate_context* context) Bexpression* bclosure = Expression::make_heap_expression(expr, loc)->get_backend(context); + Gogo* gogo = context->gogo(); + Btype* btype = this->type()->get_backend(gogo); + bclosure = gogo->backend()->convert_expression(btype, bclosure, loc); + Expression* nil_check = Expression::make_binary(OPERATOR_EQEQ, this->expr_, Expression::make_nil(loc), loc); Bexpression* bnil_check = nil_check->get_backend(context); - Gogo* gogo = context->gogo(); Bexpression* bcrash = gogo->runtime_error(RUNTIME_ERROR_NIL_DEREFERENCE, loc)->get_backend(context); |