1*e3377fbcSAnton Yartsev // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,unix.MismatchedDeallocator -analyzer-store region -std=c++11 -verify %s
2*e3377fbcSAnton Yartsev // expected-no-diagnostics
3*e3377fbcSAnton Yartsev 
4*e3377fbcSAnton Yartsev typedef __typeof(sizeof(int)) size_t;
5*e3377fbcSAnton Yartsev void *malloc(size_t);
6*e3377fbcSAnton Yartsev void free(void *);
7*e3377fbcSAnton Yartsev 
8*e3377fbcSAnton Yartsev //--------------------------------------------------------------------
9*e3377fbcSAnton Yartsev // Check that unix.Malloc + unix.MismatchedDeallocator does not enable
10*e3377fbcSAnton Yartsev // warnings produced by the alpha.cplusplus.NewDelete checker.
11*e3377fbcSAnton Yartsev //--------------------------------------------------------------------
12*e3377fbcSAnton Yartsev void testNewDeleteNoWarn() {
13*e3377fbcSAnton Yartsev   int i;
14*e3377fbcSAnton Yartsev   delete &i; // no-warning
15*e3377fbcSAnton Yartsev 
16*e3377fbcSAnton Yartsev   int *p1 = new int;
17*e3377fbcSAnton Yartsev   delete ++p1; // no-warning
18*e3377fbcSAnton Yartsev 
19*e3377fbcSAnton Yartsev   int *p2 = new int;
20*e3377fbcSAnton Yartsev   delete p2;
21*e3377fbcSAnton Yartsev   delete p2; // no-warning
22*e3377fbcSAnton Yartsev 
23*e3377fbcSAnton Yartsev   int *p3 = new int; // no-warning
24*e3377fbcSAnton Yartsev 
25*e3377fbcSAnton Yartsev   int *p4 = new int;
26*e3377fbcSAnton Yartsev   delete p4;
27*e3377fbcSAnton Yartsev   int j = *p4; // no-warning
28*e3377fbcSAnton Yartsev }
29