|
1 | 1 | ### v1.1-dev |
| 2 | +- Analyzer soundness: callback value-flow now follows every indexed store into |
| 3 | + globals, aggregates, stack objects, loads, and heap-returned objects; alias and |
| 4 | + pointer-cast chains use one cycle-safe callable resolver; callback-like operand |
| 5 | + bundles and defined personality functions contribute call-graph edges. |
| 6 | +- Indirect resolution keeps exact function types as its precise path but unions |
| 7 | + address-flow-proven type-punned targets and conservatively widens unresolved |
| 8 | + cast provenance. Address-taken declarations use the same policy and appear as |
| 9 | + reached opaque leaves in `external_declarations` without changing defined-body |
| 10 | + metrics. |
| 11 | +- New default-off `--include-process-lifecycle-roots` option adds constructors, |
| 12 | + destructors, ifunc resolvers, and a defined `LLVMFuzzerInitialize` as roots. |
| 13 | + Selected roots appear in `entries`; malformed records and unresolved explicit |
| 14 | + entries are always visible as warnings. |
| 15 | +- Confidence evidence is now entry-relative. Unreachable code can no longer |
| 16 | + raise an indirectly reached decoy from `low` to `medium` confidence. |
| 17 | +- Analyzer robustness: invalid-UTF-8 symbols are replaced safely in JSON/DOT, |
| 18 | + the LLVM debug-info option lookup is type-checked, and deterministic DOT output |
| 19 | + contains the same reachable defined-function subgraph as JSON edges. |
| 20 | +- Output destinations are file-only, collision-checked through symlinks, and |
| 21 | + validated before cleanup. JSON, lists, and optional DOT are staged beside |
| 22 | + their destinations and published transactionally; failed or concurrent runs |
| 23 | + cannot expose mixed output sets or share extraction/link intermediates. |
| 24 | +- `--clean` no longer recursively deletes project-wide `*.o`, `*.bc`, or |
| 25 | + manifests. It removes selected output files and C/C++ artifacts recorded in |
| 26 | + `.reachability-cache/owned-c-artifacts.json`, while retaining unrelated files. |
| 27 | +- An explicit `--artifact` is now a strict contract: missing, unsupported, or |
| 28 | + unextractable paths fail rather than triggering discovery. Automatic discovery |
| 29 | + has no first-eight limit and rejects equally plausible candidates with a |
| 30 | + ranked list. |
| 31 | +- Static archive expansion fails closed if any requested archive cannot be |
| 32 | + listed or fully extracted. Successful expansion work is retained for |
| 33 | + diagnostics, member names containing spaces are parsed correctly, and no |
| 34 | + complete-looking partial report is published. |
| 35 | +- gllvm builds and every `get-bc` invocation now use per-run stable symlinks to |
| 36 | + the exact checked `clang`, `clang++`, and `llvm-link`; `check-toolchain` reports |
| 37 | + those effective tools. |
| 38 | +- Rust acquisition uses Cargo metadata for workspace-root profile semantics, |
| 39 | + hierarchically merges Cargo configuration, honors `CARGO_TARGET_DIR`, filters |
| 40 | + host-only artifacts consistently, and restricts fallback collection to the |
| 41 | + current invocation. Multiple live versions and every codegen unit of the same |
| 42 | + crate are preserved instead of collapsing by crate name. |
| 43 | +- Expected subprocess, decoding, JSON, and I/O failures now become concise |
| 44 | + stage-specific CLI errors without tracebacks. Analyzer warnings are forwarded |
| 45 | + on every run, while clean runs stay quiet. |
| 46 | +- Large bitcode sets are linked in bounded batches, Cargo artifact output and |
| 47 | + non-verbose C/C++ build logs are spooled, and the analyzer writes staged JSON |
| 48 | + directly to its final parser input rather than round-tripping a second copy. |
| 49 | +- Hosted CI covers LLVM 21, 22, and 23 plus full C/Rust CLI paths and reproducible |
| 50 | + cppcheck/Clang Static Analyzer gates. Matrix discovery follows `PATH` and fails |
| 51 | + without a supported LLVM unless an explicit local skip is requested. |
| 52 | +- Development setup pins gllvm 1.3.1, pytest 9.1.1, and setuptools 80.9.0; |
| 53 | + `make compdb` generates a clangd compilation database and |
| 54 | + `make static-analysis` reproduces the analyzer checks. |
2 | 55 | - New `--mangling {auto,legacy,v0}` flag (default `auto`) on `reachability run`, |
3 | 56 | for every Rust `--lang` value: forces the analysis build's rustc |
4 | 57 | `-Csymbol-mangling-version` so its Rust symbols match whatever build you join |
|
73 | 126 | - The toolchain check no longer requires `opt` on `PATH`: it was only |
74 | 127 | version-probed as a redundant proxy, so `clang`/`clang++`/`llvm-link` (the |
75 | 128 | actual bitcode producer/merger) now define coherence. |
76 | | -- Rust acquisition warns when `deps/` holds bitcode from more than one build of a |
77 | | - crate (the newest is chosen by mtime, which can be stale if that crate was |
78 | | - cached); re-run with `--clean` for a fresh build. |
79 | 129 | - C/C++ artifact detection now recognizes fat/universal Mach-O binaries. |
80 | 130 |
|
81 | 131 | ### v1.0 |
|
0 commit comments