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