Skip to content

Commit 939400b

Browse files
authored
Add about overflow-checks flag in release mode (#24)
* Add about overflow-checks flag in release mode * Add links
1 parent 7cfd928 commit 939400b

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/coding-guidelines/types-and-traits.rst

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,26 @@ Types and Traits
1616
:scope: module
1717
:tags: numerics
1818

19-
Code must not rely on Rust's implicit integer wrapping behavior that occurs in release builds.
20-
Instead, explicitly handle potential overflows using the standard library's checked,
19+
Code must not rely on Rust's implicit integer wrapping behavior that may occur in release
20+
builds. Instead, explicitly handle potential overflows using the standard library's checked,
2121
saturating, or wrapping operations.
2222

2323
.. rationale::
2424
:id: rat_kYiIiW8R2qD1
2525
:status: draft
2626

2727
In debug builds, Rust performs runtime checks for integer overflow and will panic if detected.
28-
However, in release builds (with optimizations enabled), integer operations silently wrap
29-
around on overflow, creating potential for silent failures and security vulnerabilities.
28+
However, in release builds (with optimizations enabled), unless the flag `overflow-checks`_ is
29+
turned on, integer operations silently wrap around on overflow, creating potential for silent
30+
failures and security vulnerabilities. Note that overflow-checks only brings the default panic
31+
behavior from debug into release builds, avoiding potential silent wrap arounds. Nonetheless,
32+
abrupt program termination is usually not suitable and, therefore, turning this flag on must
33+
not be used as a substitute of explicit handling. Furthermore, the behavior in release mode is
34+
under consideration by the The Rust Language Design Team and in the future overflow checking
35+
may be turned on by default in release builds (it is a `frequently requested change`_).
36+
37+
.. _overflow-checks: https://github.com/rust-lang/rust/blob/master/src/doc/rustc/src/codegen-options/index.md#overflow-checks
38+
.. _frequently requested change: https://lang-team.rust-lang.org/frequently-requested-changes.html#numeric-overflow-checking-should-be-on-by-default-even-in-release-mode
3039

3140
Safety-critical software requires consistent and predictable behavior across all build
3241
configurations. Explicit handling of potential overflow conditions improves code clarity,

0 commit comments

Comments
 (0)