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