aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile.cc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2022-08-03 11:54:54 +0100
committerPhilip Herron <philip.herron@embecosm.com>2022-08-04 15:48:37 +0100
commit94e53f8e55e93da8db3d948c3f16d23b7c4ba7a6 (patch)
tree6a7063460808979f86fa0e4f799bb3c915615a03 /gcc/rust/backend/rust-compile.cc
parent2dc902baa1388841096e16e660082a8e79fce17e (diff)
downloadgcc-94e53f8e55e93da8db3d948c3f16d23b7c4ba7a6.zip
gcc-94e53f8e55e93da8db3d948c3f16d23b7c4ba7a6.tar.gz
gcc-94e53f8e55e93da8db3d948c3f16d23b7c4ba7a6.tar.bz2
Refactor indirect_expression from the gcc-backend wrapper
This brings out the indirect expression out of our gcc wrapper, it also just simplifies down to the normal build_indirect_expr_loc calls. Which does not require specifiying the type since we can reuse TREE_TYPE. This also simplifies the address_expression to just address_expr_with_loc and grabs the type from TREE_TYPE as well.
Diffstat (limited to 'gcc/rust/backend/rust-compile.cc')
-rw-r--r--gcc/rust/backend/rust-compile.cc27
1 files changed, 5 insertions, 22 deletions
diff --git a/gcc/rust/backend/rust-compile.cc b/gcc/rust/backend/rust-compile.cc
index 9bcd01c..4f17fa6 100644
--- a/gcc/rust/backend/rust-compile.cc
+++ b/gcc/rust/backend/rust-compile.cc
@@ -225,20 +225,14 @@ HIRCompileBase::coercion_site (tree rvalue, const TyTy::BaseType *rval,
const TyTy::ReferenceType *act
= static_cast<const TyTy::ReferenceType *> (actual);
- tree expected_type = TyTyResolveCompile::compile (ctx, act->get_base ());
- tree deref_rvalue
- = ctx->get_backend ()->indirect_expression (expected_type, rvalue,
- false /*known_valid*/,
- rvalue_locus);
+ tree deref_rvalue = indirect_expression (rvalue, rvalue_locus);
tree coerced
= coercion_site (deref_rvalue, act->get_base (), exp->get_base (),
lvalue_locus, rvalue_locus);
if (exp->is_dyn_object () && SLICE_TYPE_P (TREE_TYPE (coerced)))
return coerced;
- return address_expression (coerced,
- build_reference_type (TREE_TYPE (coerced)),
- rvalue_locus);
+ return address_expression (coerced, rvalue_locus);
}
else if (expected->get_kind () == TyTy::TypeKind::POINTER)
{
@@ -258,14 +252,12 @@ HIRCompileBase::coercion_site (tree rvalue, const TyTy::BaseType *rval,
= static_cast<const TyTy::ReferenceType *> (expected);
TyTy::BaseType *actual_base = nullptr;
- tree expected_type = error_mark_node;
if (actual->get_kind () == TyTy::TypeKind::REF)
{
const TyTy::ReferenceType *act
= static_cast<const TyTy::ReferenceType *> (actual);
actual_base = act->get_base ();
- expected_type = TyTyResolveCompile::compile (ctx, act->get_base ());
}
else if (actual->get_kind () == TyTy::TypeKind::POINTER)
{
@@ -273,22 +265,16 @@ HIRCompileBase::coercion_site (tree rvalue, const TyTy::BaseType *rval,
= static_cast<const TyTy::PointerType *> (actual);
actual_base = act->get_base ();
- expected_type = TyTyResolveCompile::compile (ctx, act->get_base ());
}
rust_assert (actual_base != nullptr);
- tree deref_rvalue
- = ctx->get_backend ()->indirect_expression (expected_type, rvalue,
- false /*known_valid*/,
- rvalue_locus);
+ tree deref_rvalue = indirect_expression (rvalue, rvalue_locus);
tree coerced = coercion_site (deref_rvalue, actual_base, exp->get_base (),
lvalue_locus, rvalue_locus);
if (exp->is_dyn_object () && SLICE_TYPE_P (TREE_TYPE (coerced)))
return coerced;
- return address_expression (coerced,
- build_pointer_type (TREE_TYPE (coerced)),
- rvalue_locus);
+ return address_expression (coerced, rvalue_locus);
}
else if (expected->get_kind () == TyTy::TypeKind::ARRAY)
{
@@ -350,10 +336,7 @@ HIRCompileBase::coerce_to_dyn_object (tree compiled_ref,
tree address_of_compiled_ref = null_pointer_node;
if (!actual->is_unit ())
- address_of_compiled_ref
- = address_expression (compiled_ref,
- build_pointer_type (TREE_TYPE (compiled_ref)),
- locus);
+ address_of_compiled_ref = address_expression (compiled_ref, locus);
std::vector<tree> vtable_ctor_elems;
std::vector<unsigned long> vtable_ctor_idx;