This is an archive of the discontinued LLVM Phabricator instance.

Fix overloaded operator new cases in TestCppOperators.py which currently work by accident
ClosedPublic

Authored by shafik on May 1 2020, 10:48 AM.

Details

Summary

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.

Diff Detail

Event Timeline

shafik created this revision.May 1 2020, 10:48 AM
teemperor accepted this revision.May 4 2020, 12:27 AM

LGTM, thanks!

lldb/test/API/lang/cpp/operators/main.cpp
11–12

This can also go as it's now unused.

This revision is now accepted and ready to land.May 4 2020, 12:27 AM
shafik updated this revision to Diff 261920.May 4 2020, 1:38 PM
shafik marked an inline comment as done.

Removing custom_new since it is now unused.

This revision was automatically updated to reflect the committed changes.
Herald added a project: Restricted Project. · View Herald TranscriptMay 4 2020, 2:00 PM