Author: davide Date: Sat Aug 1 05:13:39 2015 New Revision: 243832 URL: http://llvm.org/viewvc/llvm-project?rev=243832&view=rev Log: [SemaExpr] Factor out common diagnostic code for remainder/division.
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp Modified: cfe/trunk/lib/Sema/SemaExpr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=243832&r1=243831&r2=243832&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) +++ cfe/trunk/lib/Sema/SemaExpr.cpp Sat Aug 1 05:13:39 2015 @@ -7417,6 +7417,19 @@ static void checkArithmeticNull(Sema &S, << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); } +static void DiagnoseBadDivideOrRemainderValues(Sema& S, ExprResult &LHS, + ExprResult &RHS, + SourceLocation Loc, bool IsDiv) { + // Check for division/remainder by zero. + unsigned Diag = (IsDiv) ? diag::warn_division_by_zero : + diag::warn_remainder_by_zero; + llvm::APSInt RHSValue; + if (!RHS.get()->isValueDependent() && + RHS.get()->EvaluateAsInt(RHSValue, S.Context) && RHSValue == 0) + S.DiagRuntimeBehavior(Loc, RHS.get(), + S.PDiag(Diag) << RHS.get()->getSourceRange()); +} + QualType Sema::CheckMultiplyDivideOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool IsDiv) { @@ -7435,15 +7448,8 @@ QualType Sema::CheckMultiplyDivideOperan if (compType.isNull() || !compType->isArithmeticType()) return InvalidOperands(Loc, LHS, RHS); - - // Check for division by zero. - llvm::APSInt RHSValue; - if (IsDiv && !RHS.get()->isValueDependent() && - RHS.get()->EvaluateAsInt(RHSValue, Context) && RHSValue == 0) - DiagRuntimeBehavior(Loc, RHS.get(), - PDiag(diag::warn_division_by_zero) - << RHS.get()->getSourceRange()); - + if (IsDiv) + DiagnoseBadDivideOrRemainderValues(*this, LHS, RHS, Loc, IsDiv); return compType; } @@ -7467,15 +7473,7 @@ QualType Sema::CheckRemainderOperands( if (compType.isNull() || !compType->isIntegerType()) return InvalidOperands(Loc, LHS, RHS); - - // Check for remainder by zero. - llvm::APSInt RHSValue; - if (!RHS.get()->isValueDependent() && - RHS.get()->EvaluateAsInt(RHSValue, Context) && RHSValue == 0) - DiagRuntimeBehavior(Loc, RHS.get(), - PDiag(diag::warn_remainder_by_zero) - << RHS.get()->getSourceRange()); - + DiagnoseBadDivideOrRemainderValues(*this, LHS, RHS, Loc, false /* IsDiv */); return compType; } _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits