@@ -122,14 +122,20 @@ BuiltinFunctionChecker::checkOverflow(CheckerContext &C, SVal RetVal,
122
122
assert (Res->isIntegerType ());
123
123
124
124
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>());
133
139
134
140
return {MayOverflow || MayUnderflow, MayNotOverflow && MayNotUnderflow};
135
141
}
0 commit comments