aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile.cc
diff options
context:
space:
mode:
authorSimplyTheOther <simplytheother@gmail.com>2021-01-10 14:30:39 +0800
committerSimplyTheOther <simplytheother@gmail.com>2021-01-10 14:30:39 +0800
commitb247c0d5aadf6eb7323641ffbcf7cc67bedd2c52 (patch)
tree3a4d3a0b0569d28f679ecbc74928125034d50f4f /gcc/rust/backend/rust-compile.cc
parentee85db852a5a819e559ab00e7a382a34e925447a (diff)
parent0f42a240e53e932de0ae4799d54fe0bd15d06047 (diff)
downloadgcc-b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52.zip
gcc-b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52.tar.gz
gcc-b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52.tar.bz2
Merge branch 'master' of https://github.com/redbrain/gccrs
Diffstat (limited to 'gcc/rust/backend/rust-compile.cc')
-rw-r--r--gcc/rust/backend/rust-compile.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/rust/backend/rust-compile.cc b/gcc/rust/backend/rust-compile.cc
index 24b45ee..a52f183 100644
--- a/gcc/rust/backend/rust-compile.cc
+++ b/gcc/rust/backend/rust-compile.cc
@@ -90,6 +90,23 @@ CompileBlock::visit (HIR::BlockExpr &expr)
return true;
});
+ if (expr.has_expr ())
+ {
+ // the previous passes will ensure this is a valid return
+ // dead code elimination should remove any bad trailing expressions
+ Bexpression *compiled_expr = CompileExpr::Compile (expr.expr.get (), ctx);
+ rust_assert (compiled_expr != nullptr);
+
+ auto fncontext = ctx->peek_fn ();
+
+ std::vector<Bexpression *> retstmts;
+ retstmts.push_back (compiled_expr);
+ auto s
+ = ctx->get_backend ()->return_statement (fncontext.fndecl, retstmts,
+ expr.expr->get_locus_slow ());
+ ctx->add_statement (s);
+ }
+
ctx->pop_block ();
translated = new_block;
}