Sources and Applicability#
Rust Coding Rules Applicability Register
|
status: draft
security: YES
safety: ASIL_B
|
||||
Primary reference: SCRC MISRA C++ cross-reference#
The primary applicability reference, used as a working reference and not as an approved
standard, is the Rust Cross Reference with MISRA C++ 2023
prepared by the Coding Guidelines Subcommittee of the Safety-Critical Rust Consortium
(SCRC). It is submitted as
pull request #1226
to the safety-critical-rust-coding-guidelines
repository. The register uses the revision at commit 9e81abd4 of 9 September 2026.
The mapping is still under weekly review by the subcommittee and is not merged. The
pinned revision is recorded in the source manifest and must be re-checked, and the
register re-aligned, whenever the mapping changes.
The SCRC cross-reference assesses all 179 MISRA C++:2023 guidelines in three groups. For each guideline it also names the related MISRA C:2025 guideline where one exists, and the SCRC coding guideline that implements it where one exists.
SCRC group |
Count |
Register treatment |
|---|---|---|
Applicable to Rust in general (safe Rust) |
54 |
Mapped to S-CORE rules, or queued for rule assignment. |
Additionally applicable in the presence of unsafe code |
38 |
Mapped to S-CORE rules, or queued for rule assignment. |
Not currently applicable to Rust |
87 |
Excluded, except one guideline retained with a stated reason. |
At the pinned revision three guidelines have a draft SCRC coding guideline:
7.0.4, shift-count bounds, linked from SCR-RUST-026.
8.2.2, numeric uses of as, linked from SCR-RUST-016.
8.2.10, recursion, linked from SCR-RUST-022.
The S-CORE rules that build on these are to be reconciled with the SCRC text as it matures. The remaining applicable guidelines have an assessment and a rationale but no SCRC rule text yet; for those the S-CORE catalogue proposes candidate text.
How the register follows the draft SCRC assessment#
Each register row records the draft SCRC assessment, the related MISRA C:2025 guideline, the SCRC guideline link and category, and the S-CORE disposition:
proposed rust obligation (83): SCRC marks the guideline applicable and one or more S-CORE rules interpret it.
rule assignment pending (9): SCRC marks the guideline applicable but no S-CORE rule covers it yet. These need a new rule or an explicit exclusion decision.
not applicable (86): the SCRC draft marks the guideline not applicable and S-CORE agrees.
retained beyond SCRC (1): the SCRC draft marks the guideline not applicable but S-CORE keeps it as a supporting source for an existing rule, with the reason in the note.
The safe/unsafe distinction is recorded per source guideline and shown in the rule catalogue. It does not by itself set the scope of an S-CORE rule; a rule’s scope and the component’s production, test and tooling profiles decide where it applies.
Both open groups are listed in the review queue below. Resolving them, in either direction, is a review decision and is recorded in the register with a note.
Secondary reference: MISRust#
The paper
MISRust: Mapping MISRA-C++ Coding Guidelines to the Rust Programming Language by Marius Molz, Niels Schneider, Sven Lechner,
Stefan Kowalewski and Alexandru Kampmann (RWTH Aachen University), arXiv:2605.23490v2,
27 August 2026, and its
research dataset
were the starting point of this draft and remain a secondary reference. The
misrust_class column keeps the study’s C1 to C6 classification for every guideline
so that the origin of the rule grouping stays traceable.
Where MISRust and the SCRC cross-reference disagree, the SCRC assessment is followed. A contributor’s working notes on the differences, kept on a personal fork against an earlier mapping revision and not a subcommittee document, identify the main weaknesses of the study: compiler warnings treated as language guarantees, raw-pointer operations in safe code overlooked, and foreign interfaces not considered when dismissing C++ library guidelines. The corrections this draft had applied to the study point in the same direction and are now superseded by the SCRC assessments.
Supporting references#
MISRA C:2025 Addendum 6 assesses the applicability of MISRA C:2025 to Rust, including foreign interfaces. The SCRC cross-reference names the related MISRA C guideline per row, and the register carries that column. Addendum 6 supports the boundary review in SCR-RUST-042. The full MISRA C:2025 rule text was not part of the analysis, so a complete C-rule interpretation is not claimed.
The SCRC coding guidelines themselves are the intended long-term home of Rust-specific rule text. Where an SCRC guideline exists for a mapped source, the register links it; S-CORE rule text for the same source is a candidate contribution, not a competing standard.
Attribution and records#
The SCRC cross-reference is documentation in the consortium repository and is licensed under CC-BY-4.0 per that repository’s COPYRIGHT file. Its assessments, MISRA C references and guideline links are reproduced unchanged; its rationale text is not copied, and readers should consult the pull request for it. The MISRust classifications are reproduced unchanged from the CC-BY-4.0 research artifacts. Rule grouping, Rust rule text, dispositions, assessment notes and the review queue are S-CORE modifications and additions. Neither the SCRC nor the MISRust authors have reviewed or endorsed this draft.
The register cites MISRA guidelines by number, kind, category and page only; no MISRA guideline text is reproduced, and the MISRA documents are not redistributed here. The source manifest records the documents used by role and content hash.
Review queue#
Guidelines whose S-CORE disposition still diverges from a simple reading of the draft SCRC assessment. Nine need a rule or an exclusion decision; one is retained although the SCRC draft assesses it as not applicable, and needs confirmation or removal.
Source ID |
Draft SCRC assessment |
MISRust class |
Source level |
Proposed Rust rules |
Assessment |
|---|---|---|---|---|---|
5.10.1 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; follow Rust API Guidelines naming. No S-CORE rule yet (naming conventions). |
5.13.4 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; unsuffixed literals fall back to i32 through inference. No S-CORE rule yet. |
9.4.2 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust in part (sub-rules on braces/compound statements). No S-CORE rule yet. |
9.5.1 |
safe |
C3 |
Advisory |
rule assignment pending |
SCRC draft: applies to safe Rust; prefer iterators over index-modifying while loops. No S-CORE rule yet. |
10.1.1 |
safe |
C3 |
Advisory |
rule assignment pending |
SCRC draft: applies to safe Rust; take &mut only when needed, with trait-definition exception. No S-CORE rule yet. |
10.2.1 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; explicit enum representation, except data-carrying enums. No S-CORE rule yet. |
13.3.4 |
safe |
C2 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; function/vtable pointer comparison is unspecified. No S-CORE rule yet. |
19.0.1 |
not applicable |
C5 |
Required |
SCRC draft: not applicable (cfg attaches to the next item). Retained by S-CORE for the cfg-name typo hazard: a misspelled cfg predicate silently disables code unless check-cfg is enforced (SCR-RUST-037). |
|
21.2.3 |
safe |
C1 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; std::process::Command has platform path-search hazards. No S-CORE rule yet. |
28.3.1 |
safe |
C2 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; stateful predicates in iterator adapters. No S-CORE rule yet. |
Complete source mapping#
Every entry is a draft requiring review. A link to a Rust rule records an interpretation, not proven enforcement. The original MISRA level is distinct from a Rust rule’s proposed S-CORE level.
Source ID |
Draft SCRC assessment |
MISRust class |
Source level |
Proposed Rust rules |
Assessment |
|---|---|---|---|---|---|
0.0.1 |
safe |
C3 |
Required |
SCRC draft: applies. Unreachable code shall be removed; unreachable_code is a partial diagnostic that depends on lint activation and cannot prove absence (SCR-RUST-002). |
|
0.0.2 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-003. |
|
0.1.1 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-003. |
|
0.1.2 |
safe |
C6 |
Required |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-004. |
|
0.2.1 |
safe |
C3 |
Advisory |
SCRC draft: applies. Unused declarations shall be removed or justified; warning activation and suppressions decide coverage (SCR-RUST-002). |
|
0.2.2 |
safe |
C3 |
Required |
SCRC draft: applies. Unused parameters compile; underscore-prefixed names and allow attributes need a documented policy (SCR-RUST-002). |
|
0.2.3 |
safe |
C3 |
Advisory |
SCRC draft: applies. Unused types shall be removed or justified; diagnostics depend on visibility and configuration (SCR-RUST-002). |
|
0.2.4 |
safe |
C3 |
Advisory |
SCRC draft: applies. Unused functions shall be removed or justified; diagnostics depend on visibility and configuration (SCR-RUST-002). |
|
0.3.1 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-005. |
|
0.3.2 |
safe |
C6 |
Required |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-006. |
|
4.1.1 |
safe |
C5 |
Required |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-001. |
|
4.1.2 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-002. |
|
4.1.3 |
safe |
C4 |
Required |
SCRC draft: applies; the SCRC draft authors question the safe classification in their rationale, so the safe/unsafe scope is an open item (SCR-RUST-007). |
|
4.6.1 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable. Rust evaluation order is well defined. S-CORE agrees; no open item. |
5.0.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.7.1 |
safe |
C3 |
Required |
SCRC draft: applies to safe Rust; nested block comments make accidental commenting-out likely. |
|
5.7.2 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-009. |
|
5.7.3 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.10.1 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; follow Rust API Guidelines naming. No S-CORE rule yet (naming conventions). |
5.13.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.13.2 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.13.3 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.13.4 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; unsuffixed literals fall back to i32 through inference. No S-CORE rule yet. |
5.13.5 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.13.6 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
5.13.7 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
6.0.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
6.0.2 |
not applicable |
C6 |
Advisory |
not applicable |
SCRC draft: not applicable. Follows MISRA C mapping; arrays carry their extent. S-CORE agrees; no open item. |
6.0.3 |
unsafe |
C5 |
Advisory |
SCRC draft: applies to safe Rust: no_mangle items enter the global symbol namespace; moved to the exported-symbol rule (SCR-RUST-013). |
|
6.0.4 |
safe |
C6 |
Required |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-012. |
|
6.2.1 |
unsafe |
C4 |
Required |
SCRC draft: Check symbol attributes across editions; edition 2021 and 2024 differ in unsafe-attribute syntax. |
|
6.2.2 |
unsafe |
C3 |
Required |
SCRC draft: applies to unsafe Rust; extern declarations shall be type-compatible with the C declaration. |
|
6.2.3 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
6.2.4 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable. No header/linkage mechanism; covered by 6.2.1. S-CORE agrees; no open item. |
6.4.1 |
safe |
C6 |
Required |
SCRC draft: Adaptation permits clear same-name transformations; this differs from a blanket shadowing prohibition. |
|
6.4.2 |
not applicable |
C5 |
Required |
not applicable |
SCRC draft: not applicable until supertrait_item_shadowing stabilizes. S-CORE agrees; the inherent/trait method-resolution policy in SCR-RUST-014 is an S-CORE addition without this source. |
6.4.3 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
6.5.1 |
not applicable |
C5 |
Advisory |
not applicable |
SCRC draft: not applicable. No header files; module system defines the interface. S-CORE agrees; no open item. |
6.5.2 |
not applicable |
C4 |
Advisory |
not applicable |
SCRC draft: not applicable. Symbol export requires explicit no_mangle/link_name/extern. S-CORE agrees; no open item. |
6.7.1 |
safe |
C4 |
Required |
SCRC draft: applies to safe Rust too: safe interior-mutability/global synchronization still needs design review. |
|
6.7.2 |
safe |
C4 |
Required |
SCRC draft: applies to safe Rust too: Send is not a mutual-exclusion mechanism; globals can use safe interior mutability. |
|
6.8.1 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-015. |
|
6.8.2 |
unsafe |
C3 |
Mandatory |
SCRC draft: applies. A function shall not return a raw pointer to its local storage; the borrow checker covers references only (SCR-RUST-015). |
|
6.8.3 |
unsafe |
C3 |
Required |
SCRC draft: applies. A raw pointer to a local shall not be stored beyond the local’s lifetime; compiler guarantees cover references only (SCR-RUST-015). |
|
6.8.4 |
unsafe |
C4 |
Advisory |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-015. |
|
6.9.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
6.9.2 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
7.0.1 |
safe |
C6 |
Required |
SCRC draft: applies; the SCRC draft authors question the safe classification in their rationale, so the safe/unsafe scope is an open item (SCR-RUST-016). |
|
7.0.2 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-016. |
|
7.0.3 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable. char converts only explicitly via u32. S-CORE agrees; no open item. |
7.0.4 |
safe |
C3 |
Required |
SCRC draft: applies. The shift count shall be non-negative and below the bit width of the left operand; draft SCRC guideline gui_RHvQj8BHlz9b (SCR-RUST-026). |
|
7.0.5 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
7.0.6 |
not applicable |
C6 |
Required |
not applicable |
SCRC draft: not applicable. No integral promotion or overload sets. S-CORE agrees; no open item. |
7.11.1 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable: the source concerns the spelling of the C++ null pointer constant and overload resolution. S-CORE agrees; the typed-null policy in SCR-RUST-017 is an S-CORE adaptation without this source. |
7.11.2 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. Arrays do not decay to pointers. S-CORE agrees; no open item. |
7.11.3 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
8.0.1 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-018. |
|
8.1.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
8.1.2 |
unsafe |
C3 |
Advisory |
SCRC draft: applies to unsafe Rust; closures can capture raw pointers outside borrow-checker guarantees. |
|
8.2.1 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-019. |
|
8.2.2 |
safe |
C3 |
Required |
SCRC draft: applies to safe Rust (gui_ADHABsmK9FXz, Advisory); as casts hide intent, prefer specific conversion functions. |
|
8.2.3 |
unsafe |
C4 |
Required |
SCRC draft: Raw-pointer mutability casts can be safe syntax; validity of subsequent access still needs review. |
|
8.2.4 |
unsafe |
C4 |
Required |
SCRC draft: Safe function-pointer casts exist; do not infer ABI correctness from absence of unsafe syntax. |
|
8.2.5 |
unsafe |
C4 |
Required |
SCRC draft: transmute is not generally a safer alternative to a cast; review all representation invariants. |
|
8.2.6 |
unsafe |
C4 |
Required |
SCRC draft: Pointer casts/reconstruction may occur outside unsafe blocks; scan all code. |
|
8.2.7 |
unsafe |
C4 |
Advisory |
SCRC draft: Correction: pointer-to-integer casts do not require an unsafe block. |
|
8.2.8 |
safe |
C4 |
Required |
SCRC draft: Address width and provenance obligations apply even when the cast is safe syntax. |
|
8.2.9 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable. type_id/type_name are compile-time. S-CORE agrees; no open item. |
8.2.10 |
safe |
C6 |
Required |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-022. |
|
8.2.11 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-021. |
|
8.3.1 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
8.3.2 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
8.7.1 |
unsafe |
C4 |
Required |
SCRC draft: Pointer APIs differ: some wrapping operations permit intermediate out-of-bounds values. |
|
8.7.2 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-023. |
|
8.9.1 |
safe |
C4 |
Required |
SCRC draft: Correction: raw-pointer relational comparisons can be safe expressions; project ordering restrictions still apply. |
|
8.14.1 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-024. |
|
8.18.1 |
unsafe |
C4 |
Mandatory |
SCRC draft: Use the Rust API contract: ptr::copy permits overlap; copy_nonoverlapping does not. |
|
8.18.2 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
8.19.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
8.20.1 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-026. |
|
9.2.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. let syntax prevents the confusion. S-CORE agrees; no open item. |
9.3.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
9.4.1 |
safe |
C6 |
Required |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-027. |
|
9.4.2 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust in part (sub-rules on braces/compound statements). No S-CORE rule yet. |
9.5.1 |
safe |
C3 |
Advisory |
rule assignment pending |
SCRC draft: applies to safe Rust; prefer iterators over index-modifying while loops. No S-CORE rule yet. |
9.5.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
9.6.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
9.6.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
9.6.3 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
9.6.4 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
9.6.5 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
10.0.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
10.1.1 |
safe |
C3 |
Advisory |
rule assignment pending |
SCRC draft: applies to safe Rust; take &mut only when needed, with trait-definition exception. No S-CORE rule yet. |
10.1.2 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-028. |
|
10.2.1 |
safe |
C3 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; explicit enum representation, except data-carrying enums. No S-CORE rule yet. |
10.2.2 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
10.2.3 |
safe |
C3 |
Required |
SCRC draft: applies to safe Rust; as casts of enum discriminants to narrow integers can overflow. |
|
10.3.1 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
10.4.1 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-029. |
|
11.3.1 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
11.3.2 |
safe |
C4 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-030. |
|
11.6.1 |
unsafe |
C4 |
Advisory |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-031. |
|
11.6.2 |
unsafe |
C4 |
Mandatory |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-031. |
|
11.6.3 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
12.2.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
12.2.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
12.2.3 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
12.3.1 |
unsafe |
C5 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-032. |
|
13.1.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
13.1.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
13.3.1 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
13.3.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
13.3.3 |
safe |
C6 |
Required |
SCRC draft: Rust accepts underscore parameter patterns; names and unused-role policy need explicit interpretation. |
|
13.3.4 |
safe |
C2 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; function/vtable pointer comparison is unspecified. No S-CORE rule yet. |
14.1.1 |
safe |
C6 |
Advisory |
SCRC draft: Adapt structural public/private restriction into invariant protection; record as project interpretation. |
|
15.0.1 |
safe |
C5 |
Required |
SCRC draft: Pin is a type, not a trait; review Unpin/structural pinning only where used. |
|
15.0.2 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. No move constructors; Clone signature fixed by the trait. S-CORE agrees; no open item. |
15.1.1 |
not applicable |
C3 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
15.1.2 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
15.1.3 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
15.1.4 |
unsafe |
C3 |
Advisory |
SCRC draft: applies to unsafe Rust; MaybeUninit and similar bypass initialization checks. |
|
15.1.5 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
15.8.1 |
unsafe |
C3 |
Required |
SCRC draft: applies to unsafe Rust; Pin-based move emulation must define self-assignment behavior. |
|
16.5.1 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
16.5.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
16.6.1 |
not applicable |
C3 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
17.8.1 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
18.1.1 |
unsafe |
C2 |
Required |
SCRC draft: applies to unsafe Rust; raw-pointer panic payloads (panic_any) have unclear ownership. |
|
18.1.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
18.3.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
18.3.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
18.3.3 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
18.4.1 |
safe |
C2 |
Required |
SCRC draft: applies. Restore related obligation from C2: Drop can panic and a second panic during unwinding can abort. |
|
18.5.1 |
safe |
C5 |
Advisory |
SCRC draft: applies. Unwinding across a foreign-language boundary; a panic reaching a non-unwinding extern “C” boundary aborts and a foreign exception entering Rust is undefined behavior (SCR-RUST-036, SCR-RUST-042). |
|
18.5.2 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-036. |
|
19.0.1 |
not applicable |
C5 |
Required |
SCRC draft: not applicable (cfg attaches to the next item). Retained by S-CORE for the cfg-name typo hazard: a misspelled cfg predicate silently disables code unless check-cfg is enforced (SCR-RUST-037). |
|
19.0.2 |
safe |
C2 |
Required |
SCRC draft: applies to safe Rust; prefer functions over function-like macros, variadic macros excepted. |
|
19.0.3 |
safe |
C6 |
Advisory |
SCRC draft: applies to safe Rust. Interpreted by SCR-RUST-011. |
|
19.0.4 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.1.1 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.1.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.1.3 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable. Undefined identifiers are compile errors. S-CORE agrees; no open item. |
19.2.1 |
safe |
C3 |
Required |
SCRC draft: applies to safe Rust; include! and path attributes can shadow items in outer scopes. |
|
19.2.2 |
not applicable |
C5 |
Required |
not applicable |
SCRC draft: not applicable. Invalid include paths are compile errors. S-CORE agrees; no open item. |
19.2.3 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable: the source concerns characters in header-file names. S-CORE agrees; include!/path provenance is covered by SCR-RUST-011 without this source. |
19.3.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.3.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.3.3 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.3.4 |
safe |
C4 |
Required |
SCRC draft: Macro expression matching does not ensure single evaluation or absence of hidden effects. |
|
19.3.5 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
19.6.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
21.2.1 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
21.2.2 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
21.2.3 |
safe |
C1 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; std::process::Command has platform path-search hazards. No S-CORE rule yet. |
21.2.4 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
21.6.1 |
safe |
C6 |
Advisory |
SCRC draft: Controlled allocation is a proposed project adaptation; do not silently impose a blanket allocation ban. |
|
21.6.2 |
safe |
C5 |
Required |
SCRC draft: Drop is not guaranteed to run; mem::forget and leaks are safe operations. |
|
21.6.3 |
unsafe |
C4 |
Required |
SCRC draft: applies to unsafe Rust. Interpreted by SCR-RUST-039. |
|
21.6.4 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable: GlobalAlloc::dealloc always receives the layout, so the sized/unsized delete pairing has no counterpart. S-CORE agrees; allocator customization is represented by 21.6.3. |
21.6.5 |
not applicable |
C4 |
Required |
not applicable |
SCRC draft: not applicable. No incomplete types. S-CORE agrees; no open item. |
21.10.1 |
unsafe |
C1 |
Required |
SCRC draft: applies to unsafe Rust; C-variadic arguments (VaList) carry the same hazards as in C. |
|
21.10.2 |
unsafe |
C1 |
Required |
SCRC draft: applies to unsafe Rust; setjmp/longjmp reachable through FFI or inline assembly and often UB. |
|
21.10.3 |
unsafe |
C1 |
Required |
SCRC draft: applies to unsafe Rust; signal handling only through platform APIs. |
|
22.3.1 |
safe |
C5 |
Required |
SCRC draft: A constant argument to ordinary assert! does not by itself force compile-time evaluation. |
|
22.4.1 |
unsafe |
C2 |
Required |
SCRC draft: applies to unsafe Rust; errno is writable only through platform APIs. |
|
23.11.1 |
unsafe |
C2 |
Advisory |
SCRC draft: applies. Reassess C2: raw pointers can be constructed in safe Rust; audit boundaries by operations, not unsafe keywords. |
|
24.5.1 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
24.5.2 |
unsafe |
C1 |
Required |
SCRC draft: applies to unsafe Rust; ptr::copy and copy_nonoverlapping are the memmove/memcpy analogues. |
|
25.5.1 |
unsafe |
C1 |
Required |
SCRC draft: applies to unsafe Rust; locale handling requires FFI. |
|
25.5.2 |
unsafe |
C1 |
Mandatory |
SCRC draft: applies to unsafe Rust; only the FFI part (OS error strings, setenv) is in scope; std::env::var returns owned data. |
|
25.5.3 |
unsafe |
C1 |
Mandatory |
SCRC draft: applies to unsafe Rust; time zone, locale and errno access through FFI. |
|
26.3.1 |
not applicable |
C2 |
Advisory |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
28.3.1 |
safe |
C2 |
Required |
rule assignment pending |
SCRC draft: applies to safe Rust; stateful predicates in iterator adapters. No S-CORE rule yet. |
28.6.1 |
safe |
C4 |
Required |
SCRC draft: Comment describes a C++-specific move issue; native moves are compiler-checked, custom owners still need review. |
|
28.6.2 |
not applicable |
C2 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
28.6.3 |
unsafe |
C2 |
Required |
SCRC draft: applies to unsafe Rust; a raw pointer can observe a moved-from location. |
|
28.6.4 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
30.0.1 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |
30.0.2 |
not applicable |
C1 |
Required |
not applicable |
SCRC draft: not applicable. S-CORE agrees; no open item. |