[clang] [analyzer] Enforce not making overly complicated symbols (PR #144327)

DonĂ¡t Nagy via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 27 08:19:00 PDT 2025


NagyDonat wrote:

> Let me know if you means something like this when you referred to "you can insert one more early return".

Yes, I thought about something like your code example.

> > If you really want to bother with performance improvements that specifically target this 0.05% of the entrypoints, then you can insert one more early return here at the beginning of `evalBinOp` to skip some calculations if you encounter a `SymbolOverlyComplex`.
> 
> This is the point. I don't think I can special case these because the computations still make sense to do.
> [...]
> Btw this would solve the performance problem (at least on the sample I shared), and it's technically a correct implementation, but I still find it unfair.

The whole "place a limit on symbol complexity" logic is a fundamentally _unfair_ heuristic that stops some calculations that "make sense" and are theoretically similar to other calculations.

Generally speaking, I'm trying to follow the dichotomy that:
- The normal, commonly occurring situation should be handled by effective and elegant code that runs quickly and produces many useful and accurate results -- even if this requires lots of code complexity.
- The rare corner cases should be short-circuited by simple logic, sacrificing theoretical elegance and accepting false negatives. (Even some performance hits are acceptable if they are overall negligible.)

https://github.com/llvm/llvm-project/pull/144327


More information about the cfe-commits mailing list