summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/inlining/inline-defensive-checks.c
diff options
context:
space:
mode:
authorArtem Dergachev <artem.dergachev@gmail.com>2017-09-27 09:50:45 +0000
committerArtem Dergachev <artem.dergachev@gmail.com>2017-09-27 09:50:45 +0000
commit8c80061535d925df462e05aed212091ff7dcce6b (patch)
tree909ceb5b6fd0e723ca113a944fa4d8f0029cb81e /clang/test/Analysis/inlining/inline-defensive-checks.c
parent92c21d54a4c21c6c1cbffddf297cd619ac325d02 (diff)
downloadbcm5719-llvm-8c80061535d925df462e05aed212091ff7dcce6b.tar.gz
bcm5719-llvm-8c80061535d925df462e05aed212091ff7dcce6b.zip
[analyzer] Match more patterns in bugreporter::getDerefExpr() API.
This function can now track null pointer through simple pointer arithmetic, such as '*&*(p + 2)' => 'p' and so on, displaying intermediate diagnostic pieces for the user to understand where the null pointer is coming from. Differential Revision: https://reviews.llvm.org/D37025 llvm-svn: 314290
Diffstat (limited to 'clang/test/Analysis/inlining/inline-defensive-checks.c')
-rw-r--r--clang/test/Analysis/inlining/inline-defensive-checks.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/test/Analysis/inlining/inline-defensive-checks.c b/clang/test/Analysis/inlining/inline-defensive-checks.c
index 010d3a77475..9f211b502bc 100644
--- a/clang/test/Analysis/inlining/inline-defensive-checks.c
+++ b/clang/test/Analysis/inlining/inline-defensive-checks.c
@@ -169,6 +169,18 @@ void idcTrackZeroValueThroughUnaryPointerOperatorsWithAssignment(struct S *s) {
*x = 7; // no-warning
}
+void idcTrackZeroValueThroughManyUnaryPointerOperatorsWithAssignment(struct S *s) {
+ idc(s);
+ int *x = &*&(s->f1);
+ *x = 7; // no-warning
+}
+
+void idcTrackZeroValueThroughManyUnaryPointerOperatorsWithAssignmentAndUnaryIncrement(struct S *s) {
+ idc(s);
+ int *x = &*&((++s)->f1);
+ *x = 7; // no-warning
+}
+
struct S2 {
int a[1];
OpenPOWER on IntegriCloud