Since N3664 was implemented in Clang (r186799) it can't optimize unused pairs of ::operator new and ::operator delete anymore. Calls generated by a new/delete expression are still foldable with the updated wording. This affects optimizing away unnecessary code that would be really nice to get right. For example
#include <vector>
int main() {
std::vector<int> v;
v.push_back(1);
return v[0];
}
This should fold down to "return 1;" with no allocations. The example is of
course oversimplified but situations like this easily occur in real world code
through inlining.
The proposed patch replaces "::operator new(x)" with "new char[x]" and adds the
necessary casts in the allocator class, as suggested by Richard Smith. This is
sufficient to constant fold code like my test case again.
operator_new.patch
Description: Binary data
- Ben
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
