diff options
author | Anton Yartsev <anton.yartsev@gmail.com> | 2013-04-04 23:46:29 +0000 |
---|---|---|
committer | Anton Yartsev <anton.yartsev@gmail.com> | 2013-04-04 23:46:29 +0000 |
commit | e3377fbca2d599f37fd0f77c9379d1609c53a14e (patch) | |
tree | 84152dd50060b5f63222793735831f5019b31ebf /clang/test/Analysis/Malloc+MismatchedDeallocator_intersections.cpp | |
parent | 9a13c3e6833ddbff69fcbf90a19c040cf01e7974 (diff) | |
download | bcm5719-llvm-e3377fbca2d599f37fd0f77c9379d1609c53a14e.tar.gz bcm5719-llvm-e3377fbca2d599f37fd0f77c9379d1609c53a14e.zip |
[analyzer] Reduced the unwanted correlations between checkers living inside MallocChecker.cpp
This fixes an issue pointed to by Jordan: if unix.Malloc and unix.MismatchedDeallocator are both on, then we end up still tracking leaks of memory allocated by new.
Moved the guards right before emitting the bug reports to unify and simplify the logic of handling of multiple checkers. Now all the checkers perform their checks regardless of if they were enabled, or not, and it is decided just before the emitting of the report, if it should be emitted. (idea from Anna).
Additional changes:
improved test coverage for checker correlations;
refactoring: BadDealloc -> MismatchedDealloc
llvm-svn: 178814
Diffstat (limited to 'clang/test/Analysis/Malloc+MismatchedDeallocator_intersections.cpp')
-rw-r--r-- | clang/test/Analysis/Malloc+MismatchedDeallocator_intersections.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/Analysis/Malloc+MismatchedDeallocator_intersections.cpp b/clang/test/Analysis/Malloc+MismatchedDeallocator_intersections.cpp new file mode 100644 index 00000000000..639790d31a9 --- /dev/null +++ b/clang/test/Analysis/Malloc+MismatchedDeallocator_intersections.cpp @@ -0,0 +1,28 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,unix.MismatchedDeallocator -analyzer-store region -std=c++11 -verify %s +// expected-no-diagnostics + +typedef __typeof(sizeof(int)) size_t; +void *malloc(size_t); +void free(void *); + +//-------------------------------------------------------------------- +// Check that unix.Malloc + unix.MismatchedDeallocator does not enable +// warnings produced by the alpha.cplusplus.NewDelete checker. +//-------------------------------------------------------------------- +void testNewDeleteNoWarn() { + int i; + delete &i; // no-warning + + int *p1 = new int; + delete ++p1; // no-warning + + int *p2 = new int; + delete p2; + delete p2; // no-warning + + int *p3 = new int; // no-warning + + int *p4 = new int; + delete p4; + int j = *p4; // no-warning +} |