diff options
author | George Karpenkov <ekarpenkov@apple.com> | 2018-03-07 22:20:39 +0000 |
---|---|---|
committer | George Karpenkov <ekarpenkov@apple.com> | 2018-03-07 22:20:39 +0000 |
commit | 8e3a659105fc0934841d857193bc1521ae070b39 (patch) | |
tree | dac096742e67415be0560a4e2ec7f6eda953b029 | |
parent | 065962375dbdabd9d6250f5f1b29915b74682417 (diff) | |
download | bcm5719-llvm-8e3a659105fc0934841d857193bc1521ae070b39.tar.gz bcm5719-llvm-8e3a659105fc0934841d857193bc1521ae070b39.zip |
[analyzer] [PointerArithChecker] do not warn on indexes into vector types
rdar://35041502
Differential Revision: https://reviews.llvm.org/D44172
llvm-svn: 326952
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/PointerArithChecker.cpp | 4 | ||||
-rw-r--r-- | clang/test/Analysis/ptr-arith.c | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/PointerArithChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/PointerArithChecker.cpp index 4c4a8e3f0d0..63f82b275ba 100644 --- a/clang/lib/StaticAnalyzer/Checkers/PointerArithChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/PointerArithChecker.cpp @@ -308,6 +308,10 @@ void PointerArithChecker::checkPreStmt(const ArraySubscriptExpr *SubsExpr, // Indexing with 0 is OK. if (Idx.isZeroConstant()) return; + + // Indexing vector-type expressions is also OK. + if (SubsExpr->getBase()->getType()->isVectorType()) + return; reportPointerArithMisuse(SubsExpr->getBase(), C); } diff --git a/clang/test/Analysis/ptr-arith.c b/clang/test/Analysis/ptr-arith.c index 93cb4ee9a66..804759a32db 100644 --- a/clang/test/Analysis/ptr-arith.c +++ b/clang/test/Analysis/ptr-arith.c @@ -347,3 +347,9 @@ void test_no_crash_on_pointer_to_label() { a[0] = 0; label:; } + +typedef __attribute__((__ext_vector_type__(2))) float simd_float2; +float test_nowarning_on_vector_deref() { + simd_float2 x = {0, 1}; + return x[1]; // no-warning +} |