On 06.12.2012, at 20:18, Jordan Rose <[email protected]> wrote: > Nice! > > On Dec 6, 2012, at 11:09 , Benjamin Kramer <[email protected]> wrote: > >> Author: d0k >> Date: Thu Dec 6 13:09:30 2012 >> New Revision: 169535 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=169535&view=rev >> Log: >> Add move semantics to PartialDiagnostic, which can be very expensive to copy. >> >> Modified: >> cfe/trunk/include/clang/Basic/PartialDiagnostic.h >> >> Modified: cfe/trunk/include/clang/Basic/PartialDiagnostic.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/PartialDiagnostic.h?rev=169535&r1=169534&r2=169535&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/PartialDiagnostic.h (original) >> +++ cfe/trunk/include/clang/Basic/PartialDiagnostic.h Thu Dec 6 13:09:30 >> 2012 >> @@ -19,6 +19,7 @@ >> #include "clang/Basic/Diagnostic.h" >> #include "clang/Basic/SourceLocation.h" >> #include "llvm/ADT/STLExtras.h" >> +#include "llvm/Support/Compiler.h" >> #include "llvm/Support/DataTypes.h" >> #include <cassert> >> >> @@ -200,6 +201,14 @@ >> } >> } >> >> +#if LLVM_HAS_RVALUE_REFERENCES >> + PartialDiagnostic(PartialDiagnostic &&Other) >> + : DiagID(Other.DiagID), DiagStorage(Other.DiagStorage), >> + Allocator(Other.Allocator) { >> + Other.DiagStorage = 0; >> + } >> +#endif >> + >> PartialDiagnostic(const PartialDiagnostic &Other, Storage *DiagStorage) >> : DiagID(Other.DiagID), DiagStorage(DiagStorage), >> Allocator(reinterpret_cast<StorageAllocator *>(~uintptr_t(0))) >> @@ -242,6 +251,23 @@ >> return *this; >> } >> >> +#if LLVM_HAS_RVALUE_REFERENCES >> + PartialDiagnostic &operator=(PartialDiagnostic &&Other) { >> + if (this != &Other) { > > Is this really necessary? If this is true, I think the move contract has been > violated anyway.
Not really, a self-move assignment will just empty out the diag, which keeps the object in a valid state. Removed the check in r169542. - Ben _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
