aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile-expr.cc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2022-02-10 15:40:23 +0000
committerPhilip Herron <philip.herron@embecosm.com>2022-02-10 15:40:55 +0000
commit859732e4d167dfe83b29cebc757f21ba2c342f33 (patch)
tree2616a6c1fdc52ae274b836a055e710f19bc59ffb /gcc/rust/backend/rust-compile-expr.cc
parentf6ba472caf42db1f5f2f98b73afccf448b36c322 (diff)
downloadgcc-859732e4d167dfe83b29cebc757f21ba2c342f33.zip
gcc-859732e4d167dfe83b29cebc757f21ba2c342f33.tar.gz
gcc-859732e4d167dfe83b29cebc757f21ba2c342f33.tar.bz2
Remove AddressTakenContext
We can reuse more C front-end code c_mark_addressable can be used instead of trying to track TREE_ADDRESSABLE as part of type-checking. This also pulls the GCC::Backend::address_expression to be part of the HIRCompileBase class during code-generation.
Diffstat (limited to 'gcc/rust/backend/rust-compile-expr.cc')
-rw-r--r--gcc/rust/backend/rust-compile-expr.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc
index d49a6dc..f65e1fd 100644
--- a/gcc/rust/backend/rust-compile-expr.cc
+++ b/gcc/rust/backend/rust-compile-expr.cc
@@ -124,6 +124,13 @@ CompileExpr::visit (HIR::NegationExpr &expr)
}
void
+CompileExpr::visit (HIR::BorrowExpr &expr)
+{
+ tree main_expr = CompileExpr::Compile (expr.get_expr ().get (), ctx);
+ translated = address_expression (main_expr, expr.get_locus ());
+}
+
+void
CompileExpr::visit (HIR::DereferenceExpr &expr)
{
TyTy::BaseType *tyty = nullptr;
@@ -973,7 +980,7 @@ CompileExpr::compile_string_literal (const HIR::LiteralExpr &expr,
auto base = ctx->get_backend ()->string_constant_expression (
literal_value.as_string ());
- return ctx->get_backend ()->address_expression (base, expr.get_locus ());
+ return address_expression (base, expr.get_locus ());
}
tree
@@ -1006,8 +1013,7 @@ CompileExpr::compile_byte_string_literal (const HIR::LiteralExpr &expr,
vals,
expr.get_locus ());
- return ctx->get_backend ()->address_expression (constructed,
- expr.get_locus ());
+ return address_expression (constructed, expr.get_locus ());
}
tree
@@ -1190,7 +1196,7 @@ HIRCompileBase::resolve_adjustements (
case Resolver::Adjustment::AdjustmentType::IMM_REF:
case Resolver::Adjustment::AdjustmentType::MUT_REF:
- e = ctx->get_backend ()->address_expression (e, locus);
+ e = address_expression (e, locus);
break;
case Resolver::Adjustment::AdjustmentType::DEREF_REF:
@@ -1235,8 +1241,7 @@ HIRCompileBase::resolve_deref_adjustment (Resolver::Adjustment &adjustment,
!= Resolver::Adjustment::AdjustmentType::ERROR;
if (needs_borrow)
{
- adjusted_argument
- = ctx->get_backend ()->address_expression (expression, locus);
+ adjusted_argument = address_expression (expression, locus);
}
// make the call