diff options
author | David Bolvansky <david.bolvansky@gmail.com> | 2018-10-18 20:49:06 +0000 |
---|---|---|
committer | David Bolvansky <david.bolvansky@gmail.com> | 2018-10-18 20:49:06 +0000 |
commit | 3b6ae57654a5cedcf06ae8fd43f704fa5940342a (patch) | |
tree | 37dab75d77e4a89cfac5531fe264891fe124aa3e /clang/lib/AST/ExprConstant.cpp | |
parent | 1b051b2910cbe9cbf477bf65de1670c07b3c6d11 (diff) | |
download | bcm5719-llvm-3b6ae57654a5cedcf06ae8fd43f704fa5940342a.tar.gz bcm5719-llvm-3b6ae57654a5cedcf06ae8fd43f704fa5940342a.zip |
[Diagnostics] Check for integer overflow in array size expressions
Summary: Fixes PR27439
Reviewers: rsmith, Rakete1111
Reviewed By: rsmith
Subscribers: Rakete1111, cfe-commits
Differential Revision: https://reviews.llvm.org/D52750
llvm-svn: 344759
Diffstat (limited to 'clang/lib/AST/ExprConstant.cpp')
-rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index de0de5d13cd..c4d1245071d 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -10851,6 +10851,19 @@ APSInt Expr::EvaluateKnownConstInt(const ASTContext &Ctx, return EvalResult.Val.getInt(); } +APSInt Expr::EvaluateKnownConstIntCheckOverflow( + const ASTContext &Ctx, SmallVectorImpl<PartialDiagnosticAt> *Diag) const { + EvalResult EvalResult; + EvalResult.Diag = Diag; + EvalInfo Info(Ctx, EvalResult, EvalInfo::EM_EvaluateForOverflow); + bool Result = ::EvaluateAsRValue(Info, this, EvalResult.Val); + (void)Result; + assert(Result && "Could not evaluate expression"); + assert(EvalResult.Val.isInt() && "Expression did not evaluate to integer"); + + return EvalResult.Val.getInt(); +} + void Expr::EvaluateForOverflow(const ASTContext &Ctx) const { bool IsConst; EvalResult EvalResult; |