================ @@ -0,0 +1,57 @@ +// RUN: %check_clang_tidy %s bugprone-incorrect-enable-shared-from-this %t -- -- + +namespace std { + template <typename T> class enable_shared_from_this {}; +} //namespace std + +class BadClassExample : std::enable_shared_from_this<BadClassExample> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: public std::enable_shared_from_this<BadClassExample> + +class BadClass2Example : private std::enable_shared_from_this<BadClass2Example> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: public std::enable_shared_from_this<BadClass2Example> + +struct BadStructExample : private std::enable_shared_from_this<BadStructExample> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: public std::enable_shared_from_this<BadStructExample> + +class GoodClassExample : public std::enable_shared_from_this<GoodClassExample> {}; + +struct GoodStructExample : public std::enable_shared_from_this<GoodStructExample> {}; + +struct GoodStruct2Example : std::enable_shared_from_this<GoodStruct2Example> {}; + +class dummy_class1 {}; +class dummy_class2 {}; + +class BadMultiClassExample : std::enable_shared_from_this<BadMultiClassExample>, dummy_class1 {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: public std::enable_shared_from_this<BadMultiClassExample>, dummy_class1 + +class BadMultiClass2Example : dummy_class1, std::enable_shared_from_this<BadMultiClass2Example>, dummy_class2 {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: dummy_class1, public std::enable_shared_from_this<BadMultiClass2Example>, dummy_class2 + +class BadMultiClass3Example : dummy_class1, dummy_class2, std::enable_shared_from_this<BadMultiClass3Example> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: dummy_class1, dummy_class2, public std::enable_shared_from_this<BadMultiClass3Example> + +template <typename T> class enable_shared_from_this {}; + +class NoStdClassExample : public enable_shared_from_this<NoStdClassExample> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: Should be std::enable_shared_from_this [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: public std::enable_shared_from_this<NoStdClassExample> + +struct NoStdStructExample : enable_shared_from_this<NoStdStructExample> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: Should be std::enable_shared_from_this [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: std::enable_shared_from_this<NoStdStructExample> + +class BadMixedProblemExample : enable_shared_from_this<BadMixedProblemExample> {}; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: Should be std::enable_shared_from_this and inheritance from std::enable_shared_from_this should be public inheritance, otherwise the internal weak_ptr won't be initialized [bugprone-incorrect-enable-shared-from-this] +// CHECK-FIXES: public std::enable_shared_from_this<BadMixedProblemExample> + +//FIXME: can't do anything about this, clang-check -ast-dump doesn't show A's internals in class B's AST +class A : public std::enable_shared_from_this<A> {}; +class B : private A{}; + ---------------- EugeneZelenko wrote:
Excessive newline. https://github.com/llvm/llvm-project/pull/102299 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits