Skip to content
24 changes: 15 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,23 @@ retroactive best-effort summary; earlier changes were not formally tracked.
- `cargo_stable_mir_json` helper binary for cargo integration ([#47])
- Nix derivation for reproducible builds ([#96])
- macOS support ([#97])
- Mutability field on `PtrType` and `RefType` in `TypeMetadata`, needed to distinguish `PtrToPtr` casts that change mutability from those that change pointee type ([#127])
- ADR-001: index-first graph architecture for MIR visualization ([#124])

### Changed
- Restructured `printer.rs` into a declarative 3-phase pipeline: `collect_items` -> `collect_and_analyze_items` -> `assemble_smir`, with `CollectedCrate`/`DerivedInfo` interface types enforcing the boundary between collection and assembly
- Added `AllocMap` with debug-mode coherence checking (`verify_coherence`): asserts that every `AllocId` in stored bodies exists in the alloc map and that no body is walked twice; zero cost in release builds
- Removed dead static-item fixup from `assemble_smir` (violated the phase boundary, misclassified statics as functions; never triggered in integration tests)
- Rewrote `run_ui_tests.sh`: flag-based CLI (`--verbose`, `--save-generated-output`, `--save-debug-output`), build-once-then-invoke (eliminates per-test cargo overhead), arch-aware skip logic for cross-platform test lists
- UI test runners now extract and pass `//@ compile-flags:`, `//@ edition:`, and `//@ rustc-env:` directives from test files (previously silently ignored)
- Restructured `printer.rs` into a declarative 3-phase pipeline: `collect_items` -> `collect_and_analyze_items` -> `assemble_smir`, with `CollectedCrate`/`DerivedInfo` interface types enforcing the boundary between collection and assembly ([#121])
- Added `AllocMap` with debug-mode coherence checking (`verify_coherence`): asserts that every `AllocId` in stored bodies exists in the alloc map and that no body is walked twice; zero cost in release builds ([#121])
- Removed dead static-item fixup from `assemble_smir` (violated the phase boundary, misclassified statics as functions; never triggered in integration tests) ([#121])
- Rewrote `run_ui_tests.sh`: flag-based CLI (`--verbose`, `--save-generated-output`, `--save-debug-output`), build-once-then-invoke (eliminates per-test cargo overhead), arch-aware skip logic for cross-platform test lists ([#126])
- UI test runners now extract and pass `//@ compile-flags:`, `//@ edition:`, and `//@ rustc-env:` directives from test files (previously silently ignored) ([#126])
- Switched from compiler build to `rustup`-managed toolchain ([#33])
- Removed forked rust dependency ([#19])

### Fixed
- Fixed `get_prov_ty` to recursively walk nested struct/tuple fields when resolving provenance types; previously used exact byte-offset matching which panicked on pointers inside nested structs (e.g., `&str` at offset 56 inside `TestDesc` inside `TestDescAndFn`)
- Removed incorrect `builtin_deref` assertions from VTable and Static allocation collection that rejected valid non-pointer types (raw `*const ()` vtable pointers, non-pointer statics)
- Replaced panicking `unwrap`/`assert` calls in `get_prov_ty` with graceful fallbacks for layout failures, non-rigid types, and unexpected offsets
- Fixed early `return` in `BodyAnalyzer::visit_terminator` that skipped `super_terminator()`, causing alloc/type/span collection to miss everything inside `Call` terminators with non-`ZeroSized` function operands (const-evaluated function pointers); bug present since [`aff2dd0`](https://github.com/runtimeverification/stable-mir-json/commit/aff2dd0)
- Fixed `get_prov_ty` to recursively walk nested struct/tuple fields when resolving provenance types; previously used exact byte-offset matching which panicked on pointers inside nested structs (e.g., `&str` at offset 56 inside `TestDesc` inside `TestDescAndFn`) ([#126])
- Removed incorrect `builtin_deref` assertions from VTable and Static allocation collection that rejected valid non-pointer types (raw `*const ()` vtable pointers, non-pointer statics) ([#126])
- Replaced panicking `unwrap`/`assert` calls in `get_prov_ty` with graceful fallbacks for layout failures, non-rigid types, and unexpected offsets ([#126])
- Fixed early `return` in `BodyAnalyzer::visit_terminator` that skipped `super_terminator()`, causing alloc/type/span collection to miss everything inside `Call` terminators with non-`ZeroSized` function operands (const-evaluated function pointers); bug present since [`aff2dd0`](https://github.com/runtimeverification/stable-mir-json/commit/aff2dd0) ([#126])
- Avoided duplicate `inst.body()` calls that were reallocating `AllocId`s ([#120])
- Prevented svg/png generation when `dot` is unavailable ([#117])
- Removed unreachable early return in D2 legend rendering ([#118])
Expand Down Expand Up @@ -72,6 +74,10 @@ retroactive best-effort summary; earlier changes were not formally tracked.
[#117]: https://github.com/runtimeverification/stable-mir-json/pull/117
[#118]: https://github.com/runtimeverification/stable-mir-json/pull/118
[#120]: https://github.com/runtimeverification/stable-mir-json/pull/120
[#121]: https://github.com/runtimeverification/stable-mir-json/pull/121
[#124]: https://github.com/runtimeverification/stable-mir-json/pull/124
[#126]: https://github.com/runtimeverification/stable-mir-json/pull/126
[#127]: https://github.com/runtimeverification/stable-mir-json/pull/127

## [0.1.0] - 2024-11-29

Expand Down
Loading