diff --git a/clang/lib/AST/APValue.cpp b/clang/lib/AST/APValue.cpp index 5b0a5e256e411..ef42421518228 100644 --- a/clang/lib/AST/APValue.cpp +++ b/clang/lib/AST/APValue.cpp @@ -390,11 +390,13 @@ APValue &APValue::operator=(const APValue &RHS) { } APValue &APValue::operator=(APValue &&RHS) { - if (Kind != None && Kind != Indeterminate) - DestroyDataAndMakeUninit(); - Kind = RHS.Kind; - Data = RHS.Data; - RHS.Kind = None; + if (this != &RHS) { + if (Kind != None && Kind != Indeterminate) + DestroyDataAndMakeUninit(); + Kind = RHS.Kind; + Data = RHS.Data; + RHS.Kind = None; + } return *this; } diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index b47a4934f0b1b..ae12485850ca7 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -835,8 +835,10 @@ class ApplyDebugLocation { // Define copy assignment operator. ApplyDebugLocation &operator=(ApplyDebugLocation &&Other) { - CGF = Other.CGF; - Other.CGF = nullptr; + if (this != &Other) { + CGF = Other.CGF; + Other.CGF = nullptr; + } return *this; } diff --git a/clang/lib/Interpreter/Value.cpp b/clang/lib/Interpreter/Value.cpp index 6d0eaf1b82e10..1d6b2da087e9f 100644 --- a/clang/lib/Interpreter/Value.cpp +++ b/clang/lib/Interpreter/Value.cpp @@ -201,16 +201,17 @@ Value &Value::operator=(const Value &RHS) { } Value &Value::operator=(Value &&RHS) noexcept { - if (IsManuallyAlloc) - ValueStorage::getFromPayload(getPtr())->Release(); + if (this != &RHS) { + if (IsManuallyAlloc) + ValueStorage::getFromPayload(getPtr())->Release(); - Interp = std::exchange(RHS.Interp, nullptr); - OpaqueType = std::exchange(RHS.OpaqueType, nullptr); - ValueKind = std::exchange(RHS.ValueKind, K_Unspecified); - IsManuallyAlloc = std::exchange(RHS.IsManuallyAlloc, false); - - Data = RHS.Data; + Interp = std::exchange(RHS.Interp, nullptr); + OpaqueType = std::exchange(RHS.OpaqueType, nullptr); + ValueKind = std::exchange(RHS.ValueKind, K_Unspecified); + IsManuallyAlloc = std::exchange(RHS.IsManuallyAlloc, false); + Data = RHS.Data; + } return *this; }