[clang-tools-extra] [clang-tidy] Add bugprone-smart-ptr-initialization check (PR #181570)

Baranov Victor via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 14 13:22:32 PDT 2026


================
@@ -0,0 +1,113 @@
+// RUN: %check_clang_tidy -std=c++17-or-later %s bugprone-smart-ptr-initialization %t -- -- -I %S/../modernize/Inputs/smart-ptr
+
+#include "shared_ptr.h"
+#include "unique_ptr.h"
+
+namespace std {
+template<typename T>
+  struct remove_reference
+  { using type = T; };
+
+template<typename T>
+  struct remove_reference<T&>
+  { using type = T; };
+
+template<typename T>
+  struct remove_reference<T&&>
+  { using type = T; };
+
+template<typename T>
+  constexpr typename std::remove_reference<T>::type&&
+  move(T&& t) noexcept;
+}
+
+
+struct A {
+  int x;
+};
+
+A arr[10];
+
+void test_shared_ptr_constructor() {
+  std::shared_ptr<A[]> a(arr);
+  // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: passing a raw pointer 'arr' to std::shared_ptr<A[]> constructor may cause double deletion [bugprone-smart-ptr-initialization]
----------------
vbvictor wrote:

Actually, I think we don't even need to print 'arr' or '&getA()', just write " passing a raw pointer of type '...' to '...' ". Diagnostic column will tell where that pointer is coming from.

https://github.com/llvm/llvm-project/pull/181570


More information about the cfe-commits mailing list