Section 02: Codegen Integration
Context: rust_eh_personality is currently hardcoded in multiple real code paths, not just one declaration site. Today the relevant production/test locations are:
compiler/ori_llvm/src/codegen/runtime_decl/runtime_functions.rs(RT function declaration)compiler/ori_llvm/src/codegen/eh_model/mod.rs(EhModel::Itanium.personality_name())compiler/ori_llvm/src/codegen/eh_model/tests.rs(expected personality test)compiler/ori_llvm/src/evaluator/runtime_mappings.rs(JIT symbol address mapping + helper)compiler/ori_llvm/src/verify/tests.rs(IR verifier fixture)
arc_emitter/mod.rs already uses eh_model.personality_name(), so updating the EH model layer is the correct integration point.
Depends on: Section 01 (ori_eh_personality symbol exists in ori_rt).
02.1 Runtime Declaration Table
File(s): compiler/ori_llvm/src/codegen/runtime_decl/runtime_functions.rs
-
Rename the Itanium EH personality declaration: (2026-03-03)
// Before RtFn { name: "rust_eh_personality", params: &[Ty::I32], ret: Some(Ty::I32), attrs: &[Attr::Nounwind], jit_allowed: true, } // After RtFn { name: "ori_eh_personality", params: &[Ty::I32], ret: Some(Ty::I32), attrs: &[Attr::Nounwind], jit_allowed: true, } -
Update nearby comments that still describe JIT Itanium behavior as
rust_eh_personality. (2026-03-03)
Notes:
- Keep
jit_allowed: truefor Itanium personality. - Keep
__CxxFrameHandler3declaration unchanged for SEH. - Keep
Attr::Nounwindfor personality declarations.
02.2 EH Model Personality Selection
File(s): compiler/ori_llvm/src/codegen/eh_model/mod.rs, compiler/ori_llvm/src/codegen/eh_model/tests.rs
-
Update Itanium personality selection in
EhModel::personality_name(): (2026-03-03)// Before Self::Itanium => "rust_eh_personality", // After Self::Itanium => "ori_eh_personality", -
Update doc comments in
eh_model/mod.rsto describeori_eh_personalityon Itanium. (2026-03-03) -
Update
eh_model/tests.rsexpectation: (2026-03-03)assert_eq!(EhModel::Itanium.personality_name(), "ori_eh_personality");
Why this is critical:
arc_emitter/mod.rsresolves personality througheh_model.personality_name(). If this is not updated, emitted IR will still point atrust_eh_personalityeven if RT declarations change.
02.3 JIT Symbol Mapping
File(s): compiler/ori_llvm/src/evaluator/runtime_mappings.rs
-
Replace mapping arm: (2026-03-03)
// Before "rust_eh_personality" => rust_eh_personality_addr(), // After "ori_eh_personality" => runtime::ori_eh_personality_addr(), -
Delete obsolete helper: (2026-03-03)
fn rust_eh_personality_addr() -> usize { ... } -
Update mapping comments to reference
ori_rt/src/eh_personality.cinstead of Rust std personality internals. (2026-03-03)
Validation invariant:
jit_symbol_mappings_match_jit_allowed(runtime decl tests) must remain green; the name in RT declarations and mapping must stay aligned.
02.4 Test Fixtures and Residual References
File(s): compiler/ori_llvm/src/verify/tests.rs, plus audit across compiler/ori_llvm/src
-
Update verifier fixture personality declaration: (2026-03-03)
let personality = module.add_function("ori_eh_personality", personality_type, None); -
Remove or rewrite stale comments mentioning
rust_eh_personalityin touched files. (2026-03-03) -
Audit remaining references: (2026-03-03) — 0 matches in
compiler/ori_llvm/srcrg -n "rust_eh_personality" compiler/ori_llvm/srcExpected after this section: 0 matches in
compiler/ori_llvm/src.
02.5 Completion Checklist
-
rg -n "rust_eh_personality" compiler/ori_llvm/srcreturns 0 matches (2026-03-03) -
rg -n "ori_eh_personality" compiler/ori_llvm/srcshows hits in: (2026-03-03)codegen/runtime_decl/runtime_functions.rscodegen/eh_model/mod.rscodegen/eh_model/tests.rsevaluator/runtime_mappings.rsverify/tests.rs
-
ORI_DUMP_AFTER_LLVM=1 ori check tests/spec/functions/recursion.ori 2>&1 | grep personality(2026-03-03) N/A — no current codegen emits invoke/landingpad (personality only attached to functions with unwind blocks). Wiring verified via code path:eh_model.personality_name()→"ori_eh_personality". Will produce output after Section 03 (exception raise) is implemented. -
cargo test -p ori_llvm codegen::eh_model::testspasses (2026-03-03) — 7/7 -
cargo test -p ori_llvm codegen::runtime_decl::tests::jit_symbol_mappings_match_jit_allowedpasses (2026-03-03) -
cargo build -p ori_llvmsucceeds (2026-03-03)
Exit Criteria: Itanium personality resolution is consistently ori_eh_personality across runtime declarations, EH model selection, JIT mappings, and verifier fixtures, with zero residual rust_eh_personality references in compiler/ori_llvm/src.