[PATCH] PR libstdc++/80553 don't allow destroying non-destructible types

Marc Glisse marc.glisse@inria.fr
Tue May 2 15:30:00 GMT 2017


On Tue, 2 May 2017, Jonathan Wakely wrote:

> On 02/05/17 10:16 +0100, Jonathan Wakely wrote:
>> On 28/04/17 13:56 +0100, Jonathan Wakely wrote:
>>> We optimize _Destroy and _Destroy_n to do nothing when the type has a
>>> trivial destructor, which means we do nothing (instead of giving an
>>> error) when trying to destroy types with deleted destructors.
>> 
>> I wonder if this optimisation should even exist. The compiler should
>> be able to optimise away a loop that just calls trivial destructors,
>> without help from the library.
>
> The compiler can indeed do that optimisation, even for destructors
> like ~T() { } that are empty, but not trivial according to the
> language rules. The libstdc++ optimisation does make a difference at
> -O0 though. If we get any more bugs in that code I think we should
> just remove it though, and let the compiler do the right thing.

Does the compiler manage it for all containers, even those with iterators 
much more complicated than vector's? I'd rather keep the special code in 
the library, if it doesn't cause too much trouble.

-- 
Marc Glisse



More information about the Libstdc++ mailing list