On Sun, 17 Apr 2016, Mikhail Maltsev wrote:

Currently GCC can optimize away the following dead store:

void test(char *x)
{
 *x = 1;
 free(x);
}

but not this one (Clang handles both cases):

void test(char *x)
{
 *x = 1;
 delete x;
}

The attached patch fixes this by introducing a new __attribute__((free)). I
first tried to add new built-ins for each version of operator delete (there are
four of them), but it looked a little clumsy, and would require some special
handling for warning about taking address of built-in function.

This sounds nice. Mingw* may want to use that attribute for _aligned_free. I am concerned about what happens when a user replaces a global operator delete. Does the replacement function have to satisfy the properties for this attribute?

--
Marc Glisse

Reply via email to