1*ffe7950eSBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,unix.Malloc,unix.MismatchedDeallocator -std=c++11 -verify %s
2e3377fbcSAnton Yartsev // expected-no-diagnostics
3e3377fbcSAnton Yartsev 
4e3377fbcSAnton Yartsev typedef __typeof(sizeof(int)) size_t;
5e3377fbcSAnton Yartsev void *malloc(size_t);
6e3377fbcSAnton Yartsev void free(void *);
7e3377fbcSAnton Yartsev 
8e3377fbcSAnton Yartsev //--------------------------------------------------------------------
9e3377fbcSAnton Yartsev // Check that unix.Malloc + unix.MismatchedDeallocator does not enable
10e3377fbcSAnton Yartsev // warnings produced by the alpha.cplusplus.NewDelete checker.
11e3377fbcSAnton Yartsev //--------------------------------------------------------------------
testNewDeleteNoWarn()12e3377fbcSAnton Yartsev void testNewDeleteNoWarn() {
13e3377fbcSAnton Yartsev   int i;
14e3377fbcSAnton Yartsev   delete &i; // no-warning
15e3377fbcSAnton Yartsev 
16e3377fbcSAnton Yartsev   int *p1 = new int;
17e3377fbcSAnton Yartsev   delete ++p1; // no-warning
18e3377fbcSAnton Yartsev 
19e3377fbcSAnton Yartsev   int *p2 = new int;
20e3377fbcSAnton Yartsev   delete p2;
21e3377fbcSAnton Yartsev   delete p2; // no-warning
22e3377fbcSAnton Yartsev 
23e3377fbcSAnton Yartsev   int *p3 = new int; // no-warning
24e3377fbcSAnton Yartsev 
25e3377fbcSAnton Yartsev   int *p4 = new int;
26e3377fbcSAnton Yartsev   delete p4;
27e3377fbcSAnton Yartsev   int j = *p4; // no-warning
28b50f4ba4SAnton Yartsev }
29b50f4ba4SAnton Yartsev 
testUseZeroAllocNoWarn()30b50f4ba4SAnton Yartsev void testUseZeroAllocNoWarn() {
31b50f4ba4SAnton Yartsev   int *p1 = (int *)operator new(0);
32b50f4ba4SAnton Yartsev   *p1 = 1; // no-warning
33b50f4ba4SAnton Yartsev 
34b50f4ba4SAnton Yartsev   int *p2 = (int *)operator new[](0);
35b50f4ba4SAnton Yartsev   p2[0] = 1; // no-warning
36b50f4ba4SAnton Yartsev 
37b50f4ba4SAnton Yartsev   int *p3 = new int[0];
38b50f4ba4SAnton Yartsev   p3[0] = 1; // no-warning
39e3377fbcSAnton Yartsev }
40