brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 5819897 Raw
58 lines · cpp
1// RUN: %check_clang_tidy %s cppcoreguidelines-special-member-functions %t -- -config="{CheckOptions: {cppcoreguidelines-special-member-functions.IgnoreMacros: false}}" --2 3class DefinesDestructor {4  ~DefinesDestructor();5};6// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesDestructor' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]7 8class DefinesDefaultedDestructor {9  ~DefinesDefaultedDestructor() = default;10};11// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesDefaultedDestructor' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]12 13class DefinesCopyConstructor {14  DefinesCopyConstructor(const DefinesCopyConstructor &);15};16// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesCopyConstructor' defines a copy constructor but does not define a destructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]17 18class DefinesNothing {19};20 21class DefinesEverything {22  DefinesEverything(const DefinesEverything &);23  DefinesEverything &operator=(const DefinesEverything &);24  DefinesEverything(DefinesEverything &&);25  DefinesEverything &operator=(DefinesEverything &&);26  ~DefinesEverything();27};28 29#define DEFINE_DESTRUCTOR_ONLY(ClassName) \30  class ClassName { \31    ~ClassName(); \32  };33 34#define DEFINE_COPY_CTOR_ONLY(ClassName) \35  class ClassName { \36    ClassName(const ClassName &); \37  };38 39#define DEFINE_CLASS_WITH_DTOR(ClassName) \40  class ClassName { \41    ~ClassName(); \42  };43 44DEFINE_DESTRUCTOR_ONLY(MacroDefinedClass1)45// CHECK-MESSAGES: [[@LINE-1]]:24: warning: class 'MacroDefinedClass1' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator46DEFINE_COPY_CTOR_ONLY(MacroDefinedClass2)47// CHECK-MESSAGES: [[@LINE-1]]:23: warning: class 'MacroDefinedClass2' defines a copy constructor but does not define a destructor, a copy assignment operator, a move constructor or a move assignment operator48DEFINE_CLASS_WITH_DTOR(MacroDefinedClass3)49// CHECK-MESSAGES: [[@LINE-1]]:24: warning: class 'MacroDefinedClass3' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator50 51// Test partial macro expansion52#define CLASS_NAME MacroNamedClass53class CLASS_NAME {54  ~MacroNamedClass();55};56// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'MacroNamedClass' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator57 58