From: Philip Herron Date: Thu, 23 Jan 2025 14:44:20 +0000 (+0000) Subject: gccrs: add new -frust-overflow-checks flag to control overflow checks X-Git-Tag: basepoints/gcc-16~794 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dda64731782746dff5f9d2865aee00e3ef0324d5;p=thirdparty%2Fgcc.git gccrs: add new -frust-overflow-checks flag to control overflow checks This will be crucial for more complex gimple debugging to make it easier to follow the code vs the original rust code. gcc/rust/ChangeLog: * backend/rust-compile-expr.cc (CompileExpr::visit): disable overflow checks * lang.opt: new flag Signed-off-by: Philip Herron --- diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc index 887e476f234..29cc8835c33 100644 --- a/gcc/rust/backend/rust-compile-expr.cc +++ b/gcc/rust/backend/rust-compile-expr.cc @@ -159,27 +159,28 @@ CompileExpr::visit (HIR::ArithmeticOrLogicalExpr &expr) return; } - if (ctx->in_fn () && !ctx->const_context_p ()) - { - auto receiver_tmp = NULL_TREE; - auto receiver - = Backend::temporary_variable (ctx->peek_fn ().fndecl, NULL_TREE, - TREE_TYPE (lhs), lhs, true, - expr.get_locus (), &receiver_tmp); - auto check - = Backend::arithmetic_or_logical_expression_checked (op, lhs, rhs, - expr.get_locus (), - receiver); - - ctx->add_statement (check); - translated = receiver->get_tree (expr.get_locus ()); - } - else + bool can_generate_overflow_checks + = (ctx->in_fn () && !ctx->const_context_p ()) && flag_overflow_checks; + if (!can_generate_overflow_checks) { translated = Backend::arithmetic_or_logical_expression (op, lhs, rhs, expr.get_locus ()); + return; } + + auto receiver_tmp = NULL_TREE; + auto receiver + = Backend::temporary_variable (ctx->peek_fn ().fndecl, NULL_TREE, + TREE_TYPE (lhs), lhs, true, + expr.get_locus (), &receiver_tmp); + auto check + = Backend::arithmetic_or_logical_expression_checked (op, lhs, rhs, + expr.get_locus (), + receiver); + + ctx->add_statement (check); + translated = receiver->get_tree (expr.get_locus ()); } void diff --git a/gcc/rust/lang.opt b/gcc/rust/lang.opt index 0e9aab48dfb..9cdbce2bc0a 100644 --- a/gcc/rust/lang.opt +++ b/gcc/rust/lang.opt @@ -225,4 +225,8 @@ Enum(frust_panic) String(unwind) Value(0) EnumValue Enum(frust_panic) String(abort) Value(1) +frust-overflow-checks +Rust Var(flag_overflow_checks) Init(1) +Enable the overflow checks in code generation + ; This comment is to ensure we retain the blank line above.