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