https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77307

            Bug ID: 77307
           Summary: Bring memset + free optimisation to C++
           Product: gcc
           Version: 6.1.1
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jpakkane at gmail dot com
  Target Milestone: ---

For the following code gcc will remove the call to memset:

void destroy(char *buf, size_t bufsize) {
  memset(buf, 0, bufsize);
  free(buf);
}

However if you change it to delete[] like this:

void destroy(char *buf, size_t bufsize) {
  memset(buf, 0, bufsize);
  delete[] buf;
}

memset is called. Tested on gcc.godbolt.org, Clang and ICC seem to behave in
the same way.

In this case there are no destructors to run so the reasoning for removing the
memset call should be the same for both cases (assuming the C++ standard does
not have some weird requirements of which I am unaware).

Reply via email to