[llvm-commits] [llvm] r155761 - /llvm/trunk/include/llvm/Support/type_traits.h

John McCall rjmccall at apple.com
Sun Apr 29 04:00:14 PDT 2012


On Apr 29, 2012, at 3:54 AM, Benjamin Kramer wrote:
> On 29.04.2012, at 12:27, John McCall wrote:
>> On Apr 28, 2012, at 9:22 AM, Benjamin Kramer wrote:
>>> URL: http://llvm.org/viewvc/llvm-project?rev=155761&view=rev
>>> Log:
>>> If the __is_trivially_copyable type trait is available use it as the baseline for isPodLike.
>>> 
>>> This way we can enable the POD-like class optimization for a lot more classes,
>>> saving ~120k of code in clang/i386/Release+Asserts when selfhosting.
>> 
>> SmallVector assumes that isPodLike also implies a trivial destructor
>> and a valid and trivial copy-assignment operator.  You need to at least
>> be checking __has_trivial_destructor;  whether you want to also check
>> __is_trivially_assignable or audit and fix all the places that assume
>> something about copy assignment is up to you.
> 
> From C++11 [class]p6:
>> A trivially copyable class is a class that: […] has a trivial destructor
> 
> So __is_trivially_copyable should imply __has_trivial_destructor.

Ah, okay.

>> For example, SmallVector::push_back is now incorrect (and will fail
>> to compile) for a class with a reference member.
> 
> Hmm, this is an unfortunate requirement of the specialized push_back
> for POD-likes. I audited SmallVector and fixed the issue in r155791.

Thanks.

John.



More information about the llvm-commits mailing list