Explicitly call non-sized delete on dynamically sized memory for correct behavior under sized-delete.

The code as it stands allocates a chunk of memory of arbitrary size and places an object into it. It stores a pointer to that object and memory into a list telling the compiler that it is a pointer to a char.  When the compiler deletes the objects in the list it thinks that the list contains pointers to chars - not pointers to arbitrarily sized regions of memory.

This is fixing an issue that will reproduces when the following optimization (C++ sized dealocation) is enabled: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3536.html

The fix is to explicitly call the non-sized delete operator, and the library code that supports malloc/free/new/delete will figure out the size of the block of memory from the pointer being passed in.

Patch provided by Darryl Gove.

R=mark@chromium.org

Review URL: https://codereview.chromium.org/1788473002 .
This commit is contained in:
Ivan Penkov 2016-03-11 16:37:46 -08:00
parent 139693446b
commit ebba1800e4

View file

@ -180,7 +180,7 @@ class TestValidMap : public ::testing::Test {
void TearDown() { void TearDown() {
for (int i = 0;i < kNumberTestCases; ++i) for (int i = 0;i < kNumberTestCases; ++i)
delete map_data[i]; ::operator delete(map_data[i]);
} }