================
@@ -0,0 +1,750 @@
+// RUN: %check_clang_tidy -std=c++17-or-later %s 
modernize-use-shared-ptr-array %t
+
+namespace std {
+
+template <typename T>
+struct default_delete {
+  constexpr default_delete() noexcept = default;
+  void operator()(T *ptr) const;
+};
+
+template <typename T>
+struct default_delete<T[]> {
+  constexpr default_delete() noexcept = default;
+
+  template <typename U>
+  default_delete(const default_delete<U[]> &) noexcept {}
+
+  void operator()(T *ptr) const;
+};
+
+template <typename T>
+class shared_ptr {
+public:
+  constexpr shared_ptr() noexcept = default;
+
+  template <typename Y>
+  explicit shared_ptr(Y *ptr) {}
+
+  template <typename Y, typename D>
+  shared_ptr(Y *ptr, D d) {}
+
+  template <typename Y, typename D>
+  void reset(Y *ptr, D d) {}
+
+  shared_ptr &operator=(const shared_ptr &) { return *this; }
+
+  T *get() const noexcept { return nullptr; } 
+};
+
+} // namespace std
+
+
+// Test types and helpers
+
+struct A { int x; };
+struct B { int x; };
+struct Base {};
+struct Derived : Base {};
+
+struct WithDtor {
+  ~WithDtor() {}
+};
+
+struct ArrayFunctorDeleter {
+  void operator()(A *p) const { delete[] p; }
+};
+
+template <typename T1, typename T2>
+struct PairLike {};
+
+void destroy_array(A *p) { delete[] p; }
+void destroy_single(A *p) { delete p; }
+
+void destroy_multi(A *p) {
+  int x = 0;
+  delete[] p;
+}
+
+void destroy_conditional(A *p) {
+  if (p)
+    delete[] p;
+}
+
+A *GlobalArray;
+void delete_global(A *p) { delete[] GlobalArray; }
+void delete_other(A *p) { A *q = nullptr; delete[] q; }
+
+using MyDelete = std::default_delete<A[]>;
+using MyA = A;
+typedef A AliasA;
+typedef std::default_delete<A[]> TDDelete;
+
+constexpr int kBufSize = 128;
+
+struct Wrapper {
+  explicit Wrapper(std::shared_ptr<A> p) {}
+};
+
+std::shared_ptr<A> make_shared_from(std::shared_ptr<A> p) { return p; }
+
+
+// Positive:
+
+void positive_default_delete_basic() {
+  std::shared_ptr<A> basicSp(new A[10], std::default_delete<A[]>());
+  // CHECK-MESSAGES: :[[@LINE-1]]:{{[0-9]+}}: warning: use 
'std::shared_ptr<A[]>' instead of 'std::shared_ptr<A>' with explicit array 
deleter [modernize-use-shared-ptr-array]
----------------
zwuis wrote:

Use exact column number so that we don't accidentally miss location changes. 
Ditto elsewhere.

https://github.com/llvm/llvm-project/pull/199458
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to