xref: /minix3/external/bsd/llvm/dist/clang/test/Analysis/NewDeleteLeaks-PR19102.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -analyze -analyzer-checker=core,cplusplus.NewDeleteLeaks -verify %s
2*0a6a1f1dSLionel Sambuc 
3*0a6a1f1dSLionel Sambuc class A0 {};
4*0a6a1f1dSLionel Sambuc 
5*0a6a1f1dSLionel Sambuc class A1 {
6*0a6a1f1dSLionel Sambuc public:
7*0a6a1f1dSLionel Sambuc   A1(int);
8*0a6a1f1dSLionel Sambuc };
9*0a6a1f1dSLionel Sambuc 
10*0a6a1f1dSLionel Sambuc struct S{
11*0a6a1f1dSLionel Sambuc   int i;
12*0a6a1f1dSLionel Sambuc };
13*0a6a1f1dSLionel Sambuc 
14*0a6a1f1dSLionel Sambuc class A2 {
15*0a6a1f1dSLionel Sambuc public:
16*0a6a1f1dSLionel Sambuc   A2();
17*0a6a1f1dSLionel Sambuc   A2(S);
18*0a6a1f1dSLionel Sambuc   A2(int*);
19*0a6a1f1dSLionel Sambuc   A2(S*);
20*0a6a1f1dSLionel Sambuc   A2(S&, int);
21*0a6a1f1dSLionel Sambuc   A2(int, S**);
22*0a6a1f1dSLionel Sambuc };
23*0a6a1f1dSLionel Sambuc 
test()24*0a6a1f1dSLionel Sambuc void test() {
25*0a6a1f1dSLionel Sambuc   new int; // expected-warning@+1 {{Potential memory leak}}
26*0a6a1f1dSLionel Sambuc   new A0; // expected-warning@+1 {{Potential memory leak}}
27*0a6a1f1dSLionel Sambuc   new A1(0); // expected-warning@+1 {{Potential memory leak}}
28*0a6a1f1dSLionel Sambuc   new A2; // expected-warning@+1 {{Potential memory leak}}
29*0a6a1f1dSLionel Sambuc   S s;
30*0a6a1f1dSLionel Sambuc   s.i = 1;
31*0a6a1f1dSLionel Sambuc   S* ps = new S;
32*0a6a1f1dSLionel Sambuc   new A2(s); // expected-warning@+1 {{Potential memory leak}}
33*0a6a1f1dSLionel Sambuc   new A2(&(s.i)); // expected-warning@+1 {{Potential memory leak}}
34*0a6a1f1dSLionel Sambuc   new A2(ps); // no warning
35*0a6a1f1dSLionel Sambuc   new A2(*ps, 1); // no warning
36*0a6a1f1dSLionel Sambuc   new A2(1, &ps); // no warning
37*0a6a1f1dSLionel Sambuc 
38*0a6a1f1dSLionel Sambuc   // Tests to ensure that leaks are reported for consumed news no matter what the arguments are.
39*0a6a1f1dSLionel Sambuc   A2 *a2p1 = new A2; // expected-warning@+1 {{Potential leak of memory}}
40*0a6a1f1dSLionel Sambuc   A2 *a2p2 = new A2(ps); // expected-warning@+1 {{Potential leak of memory}}
41*0a6a1f1dSLionel Sambuc   A2 *a2p3 = new A2(*ps, 1); // expected-warning@+1 {{Potential leak of memory}}
42*0a6a1f1dSLionel Sambuc   A2 *a2p4 = new A2(1, &ps); // expected-warning@+1 {{Potential leak of memory}}
43*0a6a1f1dSLionel Sambuc }
44