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 Sambucvoid 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