diff options
author | Adam Nemet <anemet@apple.com> | 2018-12-14 00:43:34 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2018-12-14 00:43:34 +0000 |
commit | cbb8aa196b8887535f99265469ed00c3a28b4d3e (patch) | |
tree | 2c22978654f71571f05d7acf7cf612d58af84075 /clang/lib/Sema/SemaExpr.cpp | |
parent | 137e23d536509103c7940ebb8c12332eb5031d83 (diff) | |
download | bcm5719-llvm-cbb8aa196b8887535f99265469ed00c3a28b4d3e.tar.gz bcm5719-llvm-cbb8aa196b8887535f99265469ed00c3a28b4d3e.zip |
Revert "Make -Wstring-plus-int warns even if when the result is not out of bounds"
This reverts commit r349054.
It's causing:
FAILED: tools/clang/bindings/python/tests/CMakeFiles/check-clang-python
FAIL: test_diagnostic_range (tests.cindex.test_diagnostics.TestDiagnostics)
----------------------------------------------------------------------
Traceback (most recent call last):
File
"/Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm/tools/clang/bindings/python/tests/cindex/test_diagnostics.py",
line 55, in test_diagnostic_range
self.assertEqual(len(tu.diagnostics), 1)
AssertionError: 2 != 1
======================================================================
FAIL: test_diagnostic_warning (tests.cindex.test_diagnostics.TestDiagnostics)
----------------------------------------------------------------------
Traceback (most recent call last):
File
"/Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm/tools/clang/bindings/python/tests/cindex/test_diagnostics.py",
line 18, in test_diagnostic_warning
self.assertEqual(len(tu.diagnostics), 2)
AssertionError: 1 != 2
llvm-svn: 349117
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 0771e7e1df4..4ba0fb12e70 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -9135,6 +9135,16 @@ static void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, if (!IsStringPlusInt || IndexExpr->isValueDependent()) return; + Expr::EvalResult Result; + if (IndexExpr->EvaluateAsInt(Result, Self.getASTContext())) { + llvm::APSInt index = Result.Val.getInt(); + unsigned StrLenWithNull = StrExpr->getLength() + 1; + if (index.isNonNegative() && + index <= llvm::APSInt(llvm::APInt(index.getBitWidth(), StrLenWithNull), + index.isUnsigned())) + return; + } + SourceRange DiagRange(LHSExpr->getBeginLoc(), RHSExpr->getEndLoc()); Self.Diag(OpLoc, diag::warn_string_plus_int) << DiagRange << IndexExpr->IgnoreImpCasts()->getType(); |