================
@@ -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