On Sep 25, 2013, at 2:14 PM, Benjamin Kramer <[email protected]> wrote:
> 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.
Is there some technical reason that clang cannot optimize away unused pairs of
::operator new/delete? (as opposed to "just doesn't do it any more" - not a
real quote).
-- Marshall
Marshall Clow Idio Software <mailto:[email protected]>
A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly
moderated down to (-1, Flamebait).
-- Yu Suzuki
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits