rspec/rules/S7426/rust/rule.adoc
github-actions[bot] 8e35213fbb
Create rule S7426 C-like enums should not have unportable variants (#4767)
* Create rule S7426

* Update rule.adoc

* Update metadata.json

* Update metadata.json

---------

Co-authored-by: sallaigy <sallaigy@users.noreply.github.com>
Co-authored-by: Gyula Sallai <gyula.sallai@sonarsource.com>
2025-03-19 14:09:47 +00:00

33 lines
711 B
Plaintext

== Why is this an issue?
Using `repr(isize/usize)` for C-like enumerations with values that don't fit into an `i32` can lead to truncated variant values on 32-bit architectures, potentially causing unexpected behavior.
=== Code examples
==== Noncompliant code example
[source,rust,diff-id=1,diff-type=noncompliant]
----
#[repr(usize)]
enum NonPortable {
X = 0x1_0000_0000, // Noncompliant
Y = 0,
}
----
==== Compliant solution
[source,rust,diff-id=1,diff-type=compliant]
----
#[repr(u64)]
enum Portable {
X = 0x1_0000_0000, // Compliant
Y = 0,
}
----
== Resources
=== Documentation
* Clippy Lints - https://rust-lang.github.io/rust-clippy/master/index.html#enum_clike_unportable_variant