blob: 47105ff4ef329b98014d71a492165a76db7b5410 [file] [log] [blame]
Anton Yartsev69746282013-03-28 16:10:38 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=core,cplusplus.NewDelete -analyzer-store region -std=c++11 -fblocks -verify %s
2#include "Inputs/system-header-simulator-cxx.h"
3
4void *allocator(std::size_t size);
5
6void *operator new[](std::size_t size) throw() { return allocator(size); }
7void *operator new(std::size_t size) throw() { return allocator(size); }
8void *operator new(std::size_t size, std::nothrow_t& nothrow) throw() { return allocator(size); }
9void *operator new(std::size_t, double d);
10
11class C {
12public:
13 void *operator new(std::size_t);
14};
15
16void testNewMethod() {
17 void *p1 = C::operator new(0); // no warn
18
19 C *p2 = new C; // no warn
20
21 C *c3 = ::new C;
22} // expected-warning{{Memory is never released; potential leak}}
23
24void testOpNewArray() {
25 void *p = operator new[](0);
26} //FIXME: expected 'Memory is never released; potential leak'
27
28void testNewExprArray() {
29 int *p = new int[0];
30} // expected-warning{{Memory is never released; potential leak}}
31
32//----- Custom non-placement operators
33void testOpNew() {
34 void *p = operator new(0);
35} //FIXME: expected 'Memory is never released; potential leak'
36
37void testNewExpr() {
38 int *p = new int;
39} // expected-warning{{Memory is never released; potential leak}}
40
41//----- Custom NoThrow placement operators
42void testOpNewNoThrow() {
43 void *p = operator new(0, std::nothrow);
44} // expected-warning{{Memory is never released; potential leak}}
45
46void testNewExprNoThrow() {
47 int *p = new(std::nothrow) int;
48} // expected-warning{{Memory is never released; potential leak}}
49
50//----- Custom placement operators
51void testOpNewPlacement() {
52 void *p = operator new(0, 0.1); // no warn
53}
54
55void testNewExprPlacement() {
56 int *p = new(0.1) int; // no warn
57}