@@ -122,14 +122,20 @@ BuiltinFunctionChecker::checkOverflow(CheckerContext &C, SVal RetVal,
122122 assert (Res->isIntegerType ());
123123
124124 unsigned BitWidth = ACtx.getIntWidth (Res);
125- auto MinVal = llvm::APSInt::getMinValue (BitWidth, Res->isUnsignedIntegerType ());
126- auto MaxVal = llvm::APSInt::getMaxValue (BitWidth, Res->isUnsignedIntegerType ());
127-
128- SVal IsLeMax = SVB.evalBinOp (State, BO_LE, RetVal, nonloc::ConcreteInt (MaxVal), Res);
129- SVal IsGeMin = SVB.evalBinOp (State, BO_GE, RetVal, nonloc::ConcreteInt (MinVal), Res);
130-
131- auto [MayNotOverflow, MayOverflow] = State->assume (IsLeMax.castAs <DefinedOrUnknownSVal>());
132- auto [MayNotUnderflow, MayUnderflow] = State->assume (IsGeMin.castAs <DefinedOrUnknownSVal>());
125+ auto MinVal =
126+ llvm::APSInt::getMinValue (BitWidth, Res->isUnsignedIntegerType ());
127+ auto MaxVal =
128+ llvm::APSInt::getMaxValue (BitWidth, Res->isUnsignedIntegerType ());
129+
130+ SVal IsLeMax =
131+ SVB.evalBinOp (State, BO_LE, RetVal, nonloc::ConcreteInt (MaxVal), Res);
132+ SVal IsGeMin =
133+ SVB.evalBinOp (State, BO_GE, RetVal, nonloc::ConcreteInt (MinVal), Res);
134+
135+ auto [MayNotOverflow, MayOverflow] =
136+ State->assume (IsLeMax.castAs <DefinedOrUnknownSVal>());
137+ auto [MayNotUnderflow, MayUnderflow] =
138+ State->assume (IsGeMin.castAs <DefinedOrUnknownSVal>());
133139
134140 return {MayOverflow || MayUnderflow, MayNotOverflow && MayNotUnderflow};
135141}
0 commit comments