The overloaded new operator in TestCppOperators.py are working by accident. Currently we have:
void *operator new(std::size_t size) { C* r = ::new C; r->custom_new = true; return r; } void *operator new[](std::size_t size) { C* r = static_cast<C*>(std::malloc(size)); r->custom_new = true; return r; }
Which allocate a C using global new which invokes the constructor on the allocated memory, it each one then proceeds to set the member variable custom_new to true and returns the allocated memory.
This is incorrect code b/c the allocation function is supposed to allocate memory, while the new expression which invokes this has the responsibility of then invoking the constructor (if any) on the newly allocated object e.g.:
new struct C
So the constructor should be invoked again. IIUC currently because LLDB does not create the implicit constructor when parsing the DWARF because it is artificial, this results in construction being a no-op. If we OTOH explicitly default the constructor:
C() = default;
The test no longer works since the in-class member initializer will be run and sets the field back to false:
bool custom_new = false;
This behavior is a little surprising since I believe Sema should create the constructor for us when running the expression but either that is not really the case or there is some other piece that is missing.
This can also go as it's now unused.