Error Catalog
33 diagnostics across 6 categories. All error codes are stable. Some codes are enforced by proc-macro only, some by rsc lint only, and some by both — see enforcement levels below.
| Category | Codes | Count | Spec | Enforcement |
|---|---|---|---|---|
| Registers | RS001–RS008 | 8 | registers.md | proc-macro |
| Async | RS101 | 1 | async.md | rsc lint |
| Deterministic | RS201–RS210 | 10 | deterministic.md | proc-macro (partial) + rsc lint (full) |
| Addressed | RS301–RS306 | 6 | addressed.md | proc-macro + rsc lint |
| Step | RS401 | 1 | step.md | rsc lint |
| Restrictions | RS501–RS507 | 7 | restrictions.md | rsc lint |
Code Ranges
RS0xx — Typed registers (MMIO validation)
RS1xx — Bounded async (deadline enforcement)
RS2xx — Deterministic functions (purity checks)
RS3xx — Addressed types (canonical serialization)
RS4xx — Step-scoped state (context enforcement)
RS5xx — Edition restrictions (allocation, dispatch, control flow)
Enforcement Levels
Each error code is enforced at one or both levels:
- proc-macro: works with standard rustc via rs-lang-macros
- rsc lint: requires rsc compiler driver, operates on HIR/MIR
| Level | What it checks | Strength |
|---|---|---|
| proc-macro | Token stream / syn AST | Catches literal usage, misses indirection |
| rsc lint | HIR types, MIR call graph | Full transitive analysis |
Codes enforced by proc-macro only: RS001–RS008. Codes enforced by rsc only: RS101, RS206, RS209, RS210, RS401, RS501–RS507. Codes enforced by both: RS201–RS205, RS207, RS208, RS301–RS306.