aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile-expr.h
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-03-04 11:58:45 +0000
committerGitHub <noreply@github.com>2022-03-04 11:58:45 +0000
commitd89c8ccf3237e66029125c0fe007297bb86eca74 (patch)
tree24926ddec8217cdba774a50eaa06383c8a72d13e /gcc/rust/backend/rust-compile-expr.h
parentb4bd389c66a3e3bf0489626a1a70c2500d415ef8 (diff)
parentd6e1771291c792f665f5b9ed7d065bf292051e6a (diff)
downloadgcc-d89c8ccf3237e66029125c0fe007297bb86eca74.zip
gcc-d89c8ccf3237e66029125c0fe007297bb86eca74.tar.gz
gcc-d89c8ccf3237e66029125c0fe007297bb86eca74.tar.bz2
Merge #990
990: Add must use attribute support r=philberty a=philberty This is a port of the CPP front-end nodiscard attribute to be used for must_use. It contains a patch to clean up how we handle expressions vs statements and removes more of the GCC abstraction. Its my hope that we can leverage more and more existing code to get the static analysis where we want it. Fixes #856 Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/backend/rust-compile-expr.h')
-rw-r--r--gcc/rust/backend/rust-compile-expr.h30
1 files changed, 10 insertions, 20 deletions
diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h
index 3cc51d4..8aeb703 100644
--- a/gcc/rust/backend/rust-compile-expr.h
+++ b/gcc/rust/backend/rust-compile-expr.h
@@ -169,7 +169,6 @@ public:
void visit (HIR::AssignmentExpr &expr) override
{
- fncontext fn = ctx->peek_fn ();
auto lvalue = CompileExpr::Compile (expr.get_lhs (), ctx);
auto rvalue = CompileExpr::Compile (expr.get_rhs (), ctx);
@@ -191,7 +190,7 @@ public:
expr.get_rhs ()->get_locus ());
tree assignment
- = ctx->get_backend ()->assignment_statement (fn.fndecl, lvalue, rvalue,
+ = ctx->get_backend ()->assignment_statement (lvalue, rvalue,
expr.get_locus ());
ctx->add_statement (assignment);
@@ -594,9 +593,7 @@ public:
= CompileBlock::compile (expr.get_loop_block ().get (), ctx, nullptr);
tree loop_expr
= ctx->get_backend ()->loop_expression (code_block, expr.get_locus ());
- tree loop_stmt
- = ctx->get_backend ()->expression_statement (fnctx.fndecl, loop_expr);
- ctx->add_statement (loop_stmt);
+ ctx->add_statement (loop_expr);
if (tmp != NULL)
{
@@ -645,9 +642,7 @@ public:
= CompileExpr::Compile (expr.get_predicate_expr ().get (), ctx);
tree exit_expr
= ctx->get_backend ()->exit_expression (condition, expr.get_locus ());
- tree break_stmt
- = ctx->get_backend ()->expression_statement (fnctx.fndecl, exit_expr);
- ctx->add_statement (break_stmt);
+ ctx->add_statement (exit_expr);
tree code_block_stmt
= CompileBlock::compile (expr.get_loop_block ().get (), ctx, nullptr);
@@ -659,14 +654,11 @@ public:
tree loop_expr
= ctx->get_backend ()->loop_expression (loop_block, expr.get_locus ());
- tree loop_stmt
- = ctx->get_backend ()->expression_statement (fnctx.fndecl, loop_expr);
- ctx->add_statement (loop_stmt);
+ ctx->add_statement (loop_expr);
}
void visit (HIR::BreakExpr &expr) override
{
- fncontext fnctx = ctx->peek_fn ();
if (expr.has_break_expr ())
{
tree compiled_expr
@@ -676,8 +668,10 @@ public:
tree result_reference = ctx->get_backend ()->var_expression (
loop_result_holder, expr.get_expr ()->get_locus ());
- tree assignment = ctx->get_backend ()->assignment_statement (
- fnctx.fndecl, result_reference, compiled_expr, expr.get_locus ());
+ tree assignment
+ = ctx->get_backend ()->assignment_statement (result_reference,
+ compiled_expr,
+ expr.get_locus ());
ctx->add_statement (assignment);
}
@@ -721,9 +715,7 @@ public:
tree exit_expr = ctx->get_backend ()->exit_expression (
ctx->get_backend ()->boolean_constant_expression (true),
expr.get_locus ());
- tree break_stmt
- = ctx->get_backend ()->expression_statement (fnctx.fndecl, exit_expr);
- ctx->add_statement (break_stmt);
+ ctx->add_statement (exit_expr);
}
}
@@ -761,9 +753,7 @@ public:
}
}
- tree goto_label
- = ctx->get_backend ()->goto_statement (label, expr.get_locus ());
- ctx->add_statement (goto_label);
+ translated = ctx->get_backend ()->goto_statement (label, expr.get_locus ());
}
void visit (HIR::BorrowExpr &expr) override;