Skip to content

Commit

Permalink
Enable cppcoreguidelines-special-member-functions (pytorch#139132)
Browse files Browse the repository at this point in the history
Fixes #ISSUE_NUMBER

Pull Request resolved: pytorch#139132
Approved by: https://github.com/sraikund16
  • Loading branch information
cyyever authored and pytorchmergebot committed Nov 6, 2024
1 parent 22e89ea commit a9b4989
Show file tree
Hide file tree
Showing 42 changed files with 130 additions and 12 deletions.
3 changes: 2 additions & 1 deletion .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ cppcoreguidelines-*,
-cppcoreguidelines-pro-type-static-cast-downcast,
-cppcoreguidelines-pro-type-union-access,
-cppcoreguidelines-pro-type-vararg,
-cppcoreguidelines-special-member-functions,
-cppcoreguidelines-non-private-member-variables-in-classes,
-facebook-hte-RelativeInclude,
hicpp-exception-baseclass,
Expand Down Expand Up @@ -64,5 +63,7 @@ readability-string-compare,
HeaderFilterRegex: '^(aten/|c10/|torch/).*$'
WarningsAsErrors: '*'
CheckOptions:
cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor: true
cppcoreguidelines-special-member-functions.AllowImplicitlyDeletedCopyOrMove: true
misc-header-include-cycle.IgnoredFilesList: 'format.h;ivalue.h;custom_class.h;Dict.h;List.h;IListRef.h'
...
8 changes: 8 additions & 0 deletions aten/src/ATen/Context.h
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,10 @@ inline void manual_seed(uint64_t seed) {
// NoTF32Guard disable_tf32;
struct TORCH_API NoTF32Guard {
NoTF32Guard();
NoTF32Guard(NoTF32Guard&& other) = delete;
NoTF32Guard(const NoTF32Guard&) = delete;
NoTF32Guard& operator=(const NoTF32Guard&) = delete;
NoTF32Guard& operator=(NoTF32Guard&&) = delete;
~NoTF32Guard();
static bool should_disable_tf32();

Expand All @@ -613,6 +617,10 @@ struct TORCH_API NoTF32Guard {

struct TORCH_API ROCmBackwardPassGuard {
ROCmBackwardPassGuard();
ROCmBackwardPassGuard(ROCmBackwardPassGuard&& other) = delete;
ROCmBackwardPassGuard(const ROCmBackwardPassGuard&) = delete;
ROCmBackwardPassGuard& operator=(const ROCmBackwardPassGuard&) = delete;
ROCmBackwardPassGuard& operator=(ROCmBackwardPassGuard&&) = delete;
~ROCmBackwardPassGuard();
static bool is_backward_pass();
};
Expand Down
2 changes: 2 additions & 0 deletions aten/src/ATen/DynamicLibrary.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ namespace at {

struct DynamicLibrary {
AT_DISALLOW_COPY_AND_ASSIGN(DynamicLibrary);
DynamicLibrary(DynamicLibrary&& other) = delete;
DynamicLibrary& operator=(DynamicLibrary&&) = delete;

TORCH_API DynamicLibrary(
const char* name,
Expand Down
6 changes: 6 additions & 0 deletions aten/src/ATen/SparseCsrTensorUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ class CheckSparseTensorInvariants {
: old_state(at::globalContext().checkSparseTensorInvariants()) {
at::globalContext().setCheckSparseTensorInvariants(state);
}
CheckSparseTensorInvariants(CheckSparseTensorInvariants&& other) = delete;
CheckSparseTensorInvariants(const CheckSparseTensorInvariants&) = delete;
CheckSparseTensorInvariants& operator=(const CheckSparseTensorInvariants&) =
delete;
CheckSparseTensorInvariants& operator=(CheckSparseTensorInvariants&&) =
delete;

~CheckSparseTensorInvariants() {
at::globalContext().setCheckSparseTensorInvariants(old_state);
Expand Down
1 change: 1 addition & 0 deletions aten/src/ATen/TensorIterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -995,6 +995,7 @@ class TORCH_API TensorIteratorConfig final {
/// TensorIterator that can use 32-bit indexing. Taken together the splits cover
/// the original TensorIterator.
struct TORCH_API SplitUntil32Bit {
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
struct TORCH_API iterator {
iterator() = default;
iterator(const TensorIteratorBase& iter);
Expand Down
4 changes: 4 additions & 0 deletions aten/src/ATen/ThreadLocalState.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,10 @@ class TORCH_API ThreadLocalStateGuard {
// set the given state across the thread boundary
ThreadLocalState::setThreadLocalState(state);
}
ThreadLocalStateGuard(ThreadLocalStateGuard&& other) = delete;
ThreadLocalStateGuard(const ThreadLocalStateGuard&) = delete;
ThreadLocalStateGuard& operator=(const ThreadLocalStateGuard&) = delete;
ThreadLocalStateGuard& operator=(ThreadLocalStateGuard&&) = delete;

~ThreadLocalStateGuard() {
// restore previously set variables
Expand Down
1 change: 1 addition & 0 deletions aten/src/ATen/core/Dict.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ template<class Key, class Value> Dict<IValue, IValue> toGenericDict(Dict<Key, Va
* for the kernel API.
*/
template<class Key, class Value>
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
class Dict final {
private:
static_assert((std::is_same_v<IValue, Key> && std::is_same_v<IValue, Value>) || guts::typelist::contains<impl::valid_dict_key_types, Key>::value, "Invalid Key type for Dict. We only support int64_t, double, bool, and string.");
Expand Down
8 changes: 8 additions & 0 deletions aten/src/ATen/core/PythonFallbackKernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ namespace at::impl {

struct TORCH_API RestorePythonTLSSnapshot {
RestorePythonTLSSnapshot();
RestorePythonTLSSnapshot(RestorePythonTLSSnapshot&& other) = delete;
RestorePythonTLSSnapshot(const RestorePythonTLSSnapshot&) = delete;
RestorePythonTLSSnapshot& operator=(const RestorePythonTLSSnapshot&) = delete;
RestorePythonTLSSnapshot& operator=(RestorePythonTLSSnapshot&&) = delete;
~RestorePythonTLSSnapshot();

private:
Expand All @@ -18,6 +22,10 @@ struct TORCH_API RestorePythonTLSSnapshot {
struct TORCH_API MaybeSetTLSOnEntryGuard {
public:
MaybeSetTLSOnEntryGuard();
MaybeSetTLSOnEntryGuard(MaybeSetTLSOnEntryGuard&& other) = delete;
MaybeSetTLSOnEntryGuard(const MaybeSetTLSOnEntryGuard&) = delete;
MaybeSetTLSOnEntryGuard& operator=(const MaybeSetTLSOnEntryGuard&) = delete;
MaybeSetTLSOnEntryGuard& operator=(MaybeSetTLSOnEntryGuard&&) = delete;
~MaybeSetTLSOnEntryGuard();

private:
Expand Down
2 changes: 1 addition & 1 deletion aten/src/ATen/core/QuantizerBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ struct TORCH_API Quantizer : public c10::intrusive_ptr_target {
// NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members)
const ScalarType scalar_type_;
explicit Quantizer(ScalarType scalar_type) : scalar_type_(scalar_type) {}
~Quantizer() override;
~Quantizer() override = default;

// Copied from torch/csrc/jit/ir/scope.h
QuantizerPtr intrusive_from_this() {
Expand Down
6 changes: 6 additions & 0 deletions aten/src/ATen/core/Tensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <c10/util/Exception.h>

namespace at {
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
class TORCH_API OptionalTensorRef {
public:
OptionalTensorRef() = default;
Expand All @@ -20,6 +21,7 @@ class TORCH_API OptionalTensorRef {
OptionalTensorRef(const OptionalTensorRef& rhs)
: ref_(Tensor::unsafe_borrow_t{}, rhs.ref_) {}

OptionalTensorRef(OptionalTensorRef&& rhs) = default;
OptionalTensorRef& operator=(OptionalTensorRef rhs) {
std::swap(ref_, rhs.ref_);
return *this;
Expand Down Expand Up @@ -59,6 +61,10 @@ class TORCH_API TensorRef {

TensorRef(const TensorBase& src)
: ref_(Tensor::unsafe_borrow_t{}, src) {}
TensorRef(TensorRef&& other) = default;
TensorRef(const TensorRef&) = default;
TensorRef& operator=(const TensorRef&) = default;
TensorRef& operator=(TensorRef&&) = default;

const Tensor& operator*() const & {
return ref_;
Expand Down
3 changes: 3 additions & 0 deletions aten/src/ATen/core/Vitals.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ struct TORCH_API TorchVital {
explicit TorchVital(std::string n) : name(std::move(n)) {}
TorchVital(const TorchVital&) = default;
TorchVital(TorchVital&&) = default;
TorchVital& operator=(const TorchVital&) = default;
TorchVital& operator=(TorchVital&&) = default;
TorchVital() = delete;

TorchVitalAttr& create(const std::string& attr);
Expand Down Expand Up @@ -71,6 +73,7 @@ class TORCH_API APIVitals {
APIVitals(APIVitals&& other) = delete;
APIVitals& operator=(const APIVitals&) = delete;
APIVitals& operator=(APIVitals&&) = delete;
~APIVitals() = default;

private:
std::unordered_map<std::string, TorchVital> name_map_;
Expand Down
5 changes: 5 additions & 0 deletions aten/src/ATen/core/dynamic_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ class DynamicType : public SharedType {
explicit DynamicType(Tag, Arguments);
explicit DynamicType(Tag, std::string_view, Arguments);

DynamicType(DynamicType&& other) = delete;
DynamicType(const DynamicType&) = delete;
DynamicType& operator=(const DynamicType&) = delete;
DynamicType& operator=(DynamicType&&) = delete;

TypePtr containedType(size_t) const override;
size_t containedTypeSize() const override;
Tag tag() const {
Expand Down
2 changes: 1 addition & 1 deletion aten/src/ATen/core/jit_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -2204,7 +2204,7 @@ struct TORCH_API InterfaceType : public NamedType {
return is_module_;
}
static const TypeKind Kind = TypeKind::InterfaceType;
~InterfaceType() override;
~InterfaceType() override = default;
private:
InterfaceType(QualifiedName name, bool is_module);
static bool isSubTypeImpl(
Expand Down
1 change: 1 addition & 0 deletions aten/src/ATen/core/jit_type_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ struct TORCH_API Type {
SingletonOrSharedTypePtr(SingletonOrSharedTypePtr&&) noexcept = default;
SingletonOrSharedTypePtr& operator=(const SingletonOrSharedTypePtr&) = default;
SingletonOrSharedTypePtr& operator=(SingletonOrSharedTypePtr&&) noexcept = default;
~SingletonOrSharedTypePtr() = default;

T* get() const {
return repr_.isSharedAndNonNull() ? repr_.shared_.repr_.get() : static_cast<T*>(repr_.rawRepr().first);
Expand Down
1 change: 1 addition & 0 deletions aten/src/ATen/core/rref_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class C10_EXPORT RRefInterface : public c10::intrusive_ptr_target {
// counting.
RRefInterface(const RRefInterface& other) = delete;
RRefInterface(RRefInterface&& other) = delete;
RRefInterface& operator=(const RRefInterface& other) = delete;
RRefInterface& operator=(RRefInterface&& other) = delete;

~RRefInterface() override = default;
Expand Down
2 changes: 0 additions & 2 deletions aten/src/ATen/core/type.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1037,8 +1037,6 @@ InterfaceType::InterfaceType(QualifiedName name, bool is_module)
methods_(std::make_shared<std::vector<FunctionSchema>>()),
is_module_(is_module) {}

InterfaceType::~InterfaceType() = default;

bool containsAnyType(const TypePtr& type) {
std::vector<TypePtr> to_scan = { type };
while (!to_scan.empty()) {
Expand Down
6 changes: 6 additions & 0 deletions aten/src/ATen/functorch/DynamicLayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ struct SaveLocalDispatchKeySet {
}
SaveLocalDispatchKeySet(const SaveLocalDispatchKeySet&) = delete;
SaveLocalDispatchKeySet& operator=(const SaveLocalDispatchKeySet&) = delete;
SaveLocalDispatchKeySet(SaveLocalDispatchKeySet&&) = delete;
SaveLocalDispatchKeySet& operator=(SaveLocalDispatchKeySet&&) = delete;
};

const std::vector<DynamicLayer>& getDynamicLayerStack() {
Expand Down Expand Up @@ -406,6 +408,10 @@ static void dump_local_tls() {

struct WithoutTop {
WithoutTop();
WithoutTop(WithoutTop&& other) = delete;
WithoutTop(const WithoutTop&) = delete;
WithoutTop& operator=(const WithoutTop&) = delete;
WithoutTop& operator=(WithoutTop&&) = delete;
~WithoutTop();
DynamicLayer layer_;
};
Expand Down
2 changes: 0 additions & 2 deletions aten/src/ATen/quantized/Quantizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -313,8 +313,6 @@ Tensor& PerChannelAffineFloatQParamsQuantizer::dequantize_out(
return rtensor;
}

Quantizer::~Quantizer() = default;

C10_EXPORT void set_quantizer_(const Tensor& self, ConstQuantizerPtr quantizer) {
get_qtensorimpl(self)->set_quantizer_(quantizer);
}
Expand Down
6 changes: 6 additions & 0 deletions aten/src/ATen/record_function.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,8 @@ struct TORCH_API RecordFunction {

RecordFunction(const RecordFunction&) = delete;
RecordFunction& operator=(const RecordFunction&) = delete;
RecordFunction(RecordFunction&&) = delete;
RecordFunction& operator=(RecordFunction&&) = delete;

const char* name() const;

Expand Down Expand Up @@ -764,6 +766,10 @@ class TORCH_API RecordFunctionGuard {
enableRecordFunction(is_enabled);
}

RecordFunctionGuard(RecordFunctionGuard&& other) = delete;
RecordFunctionGuard(const RecordFunctionGuard&) = delete;
RecordFunctionGuard& operator=(const RecordFunctionGuard&) = delete;
RecordFunctionGuard& operator=(RecordFunctionGuard&&) = delete;
virtual ~RecordFunctionGuard() {
enableRecordFunction(prev_value_);
}
Expand Down
4 changes: 4 additions & 0 deletions c10/core/impl/PythonDispatcherTLS.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ struct C10_API DisablePythonDispatcher {
PythonDispatcherTLS::set_state({});
}

DisablePythonDispatcher(DisablePythonDispatcher&& other) = delete;
DisablePythonDispatcher(const DisablePythonDispatcher&) = delete;
DisablePythonDispatcher& operator=(const DisablePythonDispatcher&) = delete;
DisablePythonDispatcher& operator=(DisablePythonDispatcher&&) = delete;
~DisablePythonDispatcher() {
PythonDispatcherTLS::set_state(old_);
}
Expand Down
4 changes: 2 additions & 2 deletions c10/test/util/Metaprogramming_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

using namespace c10::guts;

// NOLINTBEGIN(modernize*)
// NOLINTBEGIN(modernize*, cppcoreguidelines-special-member-functions)
namespace {

namespace test_function_traits {
Expand Down Expand Up @@ -302,4 +302,4 @@ TEST(MetaprogrammingTest, TupleMap_canBeUsedWithAutoLambdas) {
} // namespace test_tuple_map

} // namespace
// NOLINTEND(modernize*)
// NOLINTEND(modernize*, cppcoreguidelines-special-member-functions)
2 changes: 2 additions & 0 deletions c10/test/util/ThreadLocal_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ TEST(ThreadLocalTest, TestThreadWithGlobalScopeVar) {
TEST(ThreadLocalTest, TestObjectsAreReleased) {
static std::atomic<int> ctors{0};
static std::atomic<int> dtors{0};
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
struct A {
A() {
++ctors;
Expand Down Expand Up @@ -183,6 +184,7 @@ TEST(ThreadLocalTest, TestObjectsAreReleased) {
TEST(ThreadLocalTest, TestObjectsAreReleasedByNonstaticThreadLocal) {
static std::atomic<int> ctors(0);
static std::atomic<int> dtors(0);
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
struct A {
A() {
++ctors;
Expand Down
1 change: 1 addition & 0 deletions c10/test/util/intrusive_ptr_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ struct SomeChildClass : SomeBaseClass {
SomeChildClass(int v) : SomeBaseClass(v) {}
};

// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
class DestructableMock : public intrusive_ptr_target {
public:
DestructableMock(bool* resourcesReleased, bool* wasDestructed)
Expand Down
1 change: 1 addition & 0 deletions c10/test/util/logging_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ TEST(
}

namespace {
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
struct Noncopyable {
int x;

Expand Down
2 changes: 2 additions & 0 deletions c10/test/util/typeid_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ TEST(TypeMetaTest, TypeMeta) {
EXPECT_NE(bar_meta.name().find("TypeMetaTestBar"), c10::string_view::npos);
}

// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
class ClassAllowAssignment {
public:
ClassAllowAssignment() = default;
Expand All @@ -78,6 +79,7 @@ class ClassAllowAssignment {
int x{42};
};

// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
class ClassNoAssignment {
public:
ClassNoAssignment() = default;
Expand Down
5 changes: 5 additions & 0 deletions c10/util/DynamicCounter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ struct DynamicCounter::Guard {
}
}

Guard(Guard&& other) = delete;
Guard(const Guard&) = delete;
Guard& operator=(const Guard&) = delete;
Guard& operator=(Guard&&) = delete;

~Guard() {
for (const auto& backend : backends_) {
backend->unregisterCounter(key_);
Expand Down
4 changes: 4 additions & 0 deletions c10/util/Exception.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@ class C10_API WarningHandlerGuard {
: prev_handler_(c10::WarningUtils::get_warning_handler()) {
c10::WarningUtils::set_warning_handler(new_handler);
}
WarningHandlerGuard(WarningHandlerGuard&& other) = delete;
WarningHandlerGuard(const WarningHandlerGuard&) = delete;
WarningHandlerGuard& operator=(const WarningHandlerGuard&) = delete;
WarningHandlerGuard& operator=(WarningHandlerGuard&&) = delete;
~WarningHandlerGuard() {
c10::WarningUtils::set_warning_handler(prev_handler_);
}
Expand Down
3 changes: 3 additions & 0 deletions c10/util/LeftRight.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ struct IncrementRAII final {
~IncrementRAII() {
_counter->fetch_sub(1);
}
IncrementRAII(IncrementRAII&&) = delete;
IncrementRAII& operator=(IncrementRAII&&) = delete;

private:
std::atomic<int32_t>* _counter;
Expand Down Expand Up @@ -201,6 +203,7 @@ class RWSafeLeftRightWrapper final {
RWSafeLeftRightWrapper(RWSafeLeftRightWrapper&&) noexcept = delete;
RWSafeLeftRightWrapper& operator=(const RWSafeLeftRightWrapper&) = delete;
RWSafeLeftRightWrapper& operator=(RWSafeLeftRightWrapper&&) noexcept = delete;
~RWSafeLeftRightWrapper() = default;

template <typename F>
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
Expand Down
1 change: 1 addition & 0 deletions c10/util/order_preserving_flat_hash_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ struct KeyOrValueEquality : functor_storage<bool, key_equal> {
};
static constexpr int8_t min_lookups = 4;
template <typename T>
// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions)
struct sherwood_v3_entry {
// NOLINTNEXTLINE(modernize-use-equals-default)
sherwood_v3_entry() {}
Expand Down
4 changes: 4 additions & 0 deletions torch/csrc/distributed/rpc/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ TORCH_API void disableJitRRefPickle();

struct TORCH_API JitRRefPickleGuard {
JitRRefPickleGuard();
JitRRefPickleGuard(JitRRefPickleGuard&& other) = delete;
JitRRefPickleGuard(const JitRRefPickleGuard&) = delete;
JitRRefPickleGuard& operator=(const JitRRefPickleGuard&) = delete;
JitRRefPickleGuard& operator=(JitRRefPickleGuard&&) = delete;
~JitRRefPickleGuard();
};

Expand Down
Loading

0 comments on commit a9b4989

Please sign in to comment.