This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add malloc predictor (PR middle-end/83023).


On 08/01/2018 05:25 AM, Marc Glisse wrote:

Throwing new is returns_nonnull (errors are reported with exceptions) so that's fine, but non-throwing new is not:

int* p1 = new(std::nothrow) int;

Here errors are reported by returning 0, so it is common to test if p1 is 0 and this is precisely the case that could benefit from a predictor but does not have the attribute to do so (there are also consequences on aliasing).

Agreed. both throwing and non-throwing operator new are malloc-like. Placement new doesn't throw, it is explicitly defined to return the passed in pointer (and it's not replaceable by the user). So may return null, but I don't think any code (outside of a conformance testsuite) would actually do that.

I can't find words that specify the return value of any allocation function is unaliased to any existing object. The closest it gets is that the non-placement forms might be implemented via malloc and friends.

nathan

--
Nathan Sidwell


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]