On Sat, Sep 7, 2013 at 6:44 AM, Basile Starynkevitch <bas...@starynkevitch.net> wrote: > On Sat, 2013-09-07 at 12:33 +0200, Marc Glisse wrote: >> Hello, >> >> this patch teaches the compiler that operator new, when it can throw, >> isn't allowed to return a null pointer. Note that it doesn't work for >> placement new (that one may have to be handled in the front-end or the >> inliner), and it will not work on user-defined operator new if they are >> inlined. I guess it would be possible to teach the inliner to insert an >> assert_expr or something when inlining such a function, but that's not for >> now. The code I removed from vrp_visit_stmt was duplicated in >> stmt_interesting_for_vrp and thus useless. > > > Interesting patch. However, I feel that we should give advanced users > the ability to say that their new operator is never returning null... > In particular, if I define my own new operator which never returns nil, > I find strange that it would be less optimized than the system's > operator new. > > Perhaps we need an attribute `nonnullresult' which whould means that. > (we already the nonnull attribute for function arguments)
'operator new' is a replaceable function, so when you define it, you have to abide by the standard semantics. -- Gaby