diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-06-09 04:35:57 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-06-09 04:35:57 +0000 |
commit | 1ee77fbdea58944b047de8ff88901aea4e93ed7d (patch) | |
tree | fde3276ecdbc4adc9069be75cd0ed4b3fbe684f7 /gcc/go/gofrontend/statements.cc | |
parent | 120ef1d50ab7fe53a67fb2026374b2bdd67838bd (diff) | |
download | gcc-1ee77fbdea58944b047de8ff88901aea4e93ed7d.zip gcc-1ee77fbdea58944b047de8ff88901aea4e93ed7d.tar.gz gcc-1ee77fbdea58944b047de8ff88901aea4e93ed7d.tar.bz2 |
compiler: additional lvalue/rvalue context fixes
Fix lvalue/rvalue context mixup Set_and_use_temporary_expression's
do_get_backend() method. Enhance Mark_lvalue_varexprs to handle
conversions and temporary reference expressions, since occasionally
the front end emits code such as "deref(conv(tempref)) = ...".
Reviewed-on: https://go-review.googlesource.com/45141
From-SVN: r249047
Diffstat (limited to 'gcc/go/gofrontend/statements.cc')
-rw-r--r-- | gcc/go/gofrontend/statements.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index ae3873e..7a448d7 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -912,6 +912,21 @@ int Mark_lvalue_varexprs::expression(Expression** ppexpr) if (ue && ue->op() == OPERATOR_MULT) return TRAVERSE_CONTINUE; + Type_conversion_expression* ce = e->conversion_expression(); + if (ce) + return TRAVERSE_CONTINUE; + + Temporary_reference_expression* tre = + e->temporary_reference_expression(); + if (tre) + { + tre = new Temporary_reference_expression(tre->statement(), + tre->location()); + *ppexpr = tre; + tre->set_is_lvalue(); + return TRAVERSE_EXIT; + } + return TRAVERSE_EXIT; } |