Hello, On Thu, Sep 24 2026, best xmg wrote: > Hi all, > > Reference and move semantics are a part of C++ that experienced engineers > still get subtly wrong, so I audited the tree with clang-tidy's > performance-* checks, which trace whether a by-value parameter is ever > mutated or a std::move target is actually reachable -- the kind of > exhaustive per-parameter check regular compiler warnings and human review > aren't built to do. Only patch 1 has a measured performance number; > patches 2-5 are correctness/consistency fixes in the same spirit with no > individual perf claim. No functional change is intended anywhere in the > series. > > Patch 1 removes a needless deep-copy of program_state (which owns a whole > region_model) when -fanalyzer creates an exploded_node, by giving > program_state a move-assignment operator and threading the move through > point_and_state and exploded_node. > > Testing: > - x86_64-pc-linux-gnu, --enable-languages=c,c++,lto, --disable-bootstrap. > - check-gcc analyzer.exp/tree-ssa.exp/ipa.exp on current trunk > (492fbdbf99d): 16820+10537 pass. Same 2 pre-existing failures as > unpatched trunk, unrelated to this series: > * omp-parallel-for-1.c: -Wanalyzer-symbol-too-complex depth boundary. > * ssa-sink-18.c: known r17-3756 regression (unrelated ivopts change). > - Timing (patch 1 only): 8 interleaved `cc1 -fanalyzer` runs on > libiberty/cp-demangle.c, binary swapped each run: 63.98s -> 60.10s > median (6.06% faster), no overlap across all 8 pairs. > > Full test logs and the benchmark script are available on request.
The ipa-cp.cc and ipa-cp.h hunks are OK. > > I don't have push access; posting for review. Happy to split patch 1 > out on its own if that's preferred, or to fold 2-5 together -- they're > independent of each other and of patch 1. If you carve these to a separate patch, I can push t on your behalf. (The other bits in the patch need to be approved by someone else.) Thanks, Martin
