[analyzer] Do not emit redundant SymbolCasts
In `RegionStore::getBinding` we call `evalCast` unconditionally to align the stored value's type to the one that is being queried. However, the stored type might be the same, so we may end up having redundant `SymbolCasts` emitted. The solution is to check whether the `to` and `from` type are the same in `makeNonLoc`. Note, we can't just do type equivalence check at the beginning of `evalCast` because when `evalCast` is called from `getBinding` then the original type (`OriginalTy`) is not set, so one operand is missing for the comparison. In `evalCastSubKind(nonloc::SymbolVal)` when the original type is not set, we get the `from` type via `SymbolVal::getType()`. Differential Revision: https://reviews.llvm.org/D128068
Loading
Please sign in to comment