[cfe-commits] r169535 - /cfe/trunk/include/clang/Basic/PartialDiagnostic.h
Jordan Rose
jordan_rose at apple.com
Thu Dec 6 11:18:00 PST 2012
Nice!
On Dec 6, 2012, at 11:09 , Benjamin Kramer <benny.kra at googlemail.com> 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.
More information about the cfe-commits
mailing list