Overflow detection for +/-

llvm-svn: 39403
This commit is contained in:
Chris Lattner 2007-04-11 03:34:29 +00:00
parent 9cc755d535
commit 028c7decef
1 changed files with 10 additions and 0 deletions

View File

@ -467,9 +467,19 @@ static bool EvaluateDirectiveSubExpr(APSInt &LHS, unsigned MinPrec,
}
case tok::plus:
Res = LHS + RHS;
if (LHS.isUnsigned())
Overflow = Res.ult(LHS);
else if (LHS.isPositive() == RHS.isPositive() &&
Res.isPositive() != LHS.isPositive())
Overflow = true; // Overflow for signed addition.
break;
case tok::minus:
Res = LHS - RHS;
if (LHS.isUnsigned())
Overflow = Res.ugt(LHS);
else if (LHS.isPositive() != RHS.isPositive() &&
Res.isPositive() != LHS.isPositive())
Overflow = true; // Overflow for signed subtraction.
break;
case tok::lessequal:
Res = LHS <= RHS;