// Scale a base value by a scaling factor, and return the scaled // value as an SVal. Used by 'computeOffset'. static inline SVal scaleValue(ProgramStateRef state, NonLoc baseVal, CharUnits scaling, SValBuilder &sb) { return sb.evalBinOpNN(state, BO_Mul, baseVal, sb.makeArrayIndex(scaling.getQuantity()), sb.getArrayIndexType()); }
// Add an SVal to another, treating unknown and undefined values as // summing to UnknownVal. Used by 'computeOffset'. static SVal addValue(ProgramStateRef state, SVal x, SVal y, SValBuilder &svalBuilder) { // We treat UnknownVals and UndefinedVals the same here because we // only care about computing offsets. if (x.isUnknownOrUndef() || y.isUnknownOrUndef()) return UnknownVal(); return svalBuilder.evalBinOpNN(state, BO_Add, cast<NonLoc>(x), cast<NonLoc>(y), svalBuilder.getArrayIndexType()); }