diff options
author | Philip Herron <philip.herron@embecosm.com> | 2022-08-03 11:54:54 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2022-08-04 15:48:37 +0100 |
commit | 94e53f8e55e93da8db3d948c3f16d23b7c4ba7a6 (patch) | |
tree | 6a7063460808979f86fa0e4f799bb3c915615a03 /gcc/rust/backend/rust-compile.cc | |
parent | 2dc902baa1388841096e16e660082a8e79fce17e (diff) | |
download | gcc-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.cc | 27 |
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; |