[analyzer] Use the expression’s type instead of region’s type in ArrayToPointer decay evaluation
This gives slightly better precision, specifically, in cases where a non-typed region represents the array
or when the type is a non-array type, which can happen when an array is a result of a reinterpret_cast.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182810 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Analysis/reference.cpp b/test/Analysis/reference.cpp
index 1dabe7b..bd5eaaa 100644
--- a/test/Analysis/reference.cpp
+++ b/test/Analysis/reference.cpp
@@ -75,6 +75,13 @@
int (&x)[1];
int *m() { return x; }
+
+ void testArrayToPointerDecayWithNonTypedValueRegion() {
+ int *p = x;
+ int *q = x;
+ clang_analyzer_eval(p[0] == q[0]); // expected-warning{{TRUE}}
+ }
+
};
void test() {