xref: /llvm-project/lldb/test/API/lang/cpp/global_operators/main.cpp (revision 99451b4453688a94c6014cac233d371ab4cc342d)
1*99451b44SJordan Rupprecht #include <new>
2*99451b44SJordan Rupprecht 
3*99451b44SJordan Rupprecht struct new_tag_t
4*99451b44SJordan Rupprecht {
5*99451b44SJordan Rupprecht };
6*99451b44SJordan Rupprecht new_tag_t new_tag;
7*99451b44SJordan Rupprecht 
8*99451b44SJordan Rupprecht struct Struct {
9*99451b44SJordan Rupprecht 	int value;
10*99451b44SJordan Rupprecht };
11*99451b44SJordan Rupprecht 
operator ==(const Struct & a,const Struct & b)12*99451b44SJordan Rupprecht bool operator==(const Struct &a, const Struct &b) {
13*99451b44SJordan Rupprecht 	return a.value == b.value;
14*99451b44SJordan Rupprecht }
15*99451b44SJordan Rupprecht 
16*99451b44SJordan Rupprecht typedef char buf_t[sizeof(Struct)];
17*99451b44SJordan Rupprecht buf_t global_new_buf, tagged_new_buf;
18*99451b44SJordan Rupprecht 
19*99451b44SJordan Rupprecht // This overrides global operator new
20*99451b44SJordan Rupprecht // This function and the following does not actually allocate memory. We are merely
21*99451b44SJordan Rupprecht // trying to make sure it is getting called.
22*99451b44SJordan Rupprecht void *
operator new(std::size_t count)23*99451b44SJordan Rupprecht operator new(std::size_t count)
24*99451b44SJordan Rupprecht {
25*99451b44SJordan Rupprecht     return &global_new_buf;
26*99451b44SJordan Rupprecht }
27*99451b44SJordan Rupprecht 
28*99451b44SJordan Rupprecht // A custom allocator
29*99451b44SJordan Rupprecht void *
operator new(std::size_t count,const new_tag_t &)30*99451b44SJordan Rupprecht operator new(std::size_t count, const new_tag_t &)
31*99451b44SJordan Rupprecht {
32*99451b44SJordan Rupprecht     return &tagged_new_buf;
33*99451b44SJordan Rupprecht }
34*99451b44SJordan Rupprecht 
main()35*99451b44SJordan Rupprecht int main() {
36*99451b44SJordan Rupprecht 	Struct s1, s2, s3;
37*99451b44SJordan Rupprecht 	s1.value = 3;
38*99451b44SJordan Rupprecht 	s2.value = 5;
39*99451b44SJordan Rupprecht 	s3.value = 3;
40*99451b44SJordan Rupprecht 	return 0; // break here
41*99451b44SJordan Rupprecht }
42*99451b44SJordan Rupprecht 
43