================
@@ -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:
Here are my couple of thoughts of how this should look like:
1) use "raw pointer 'arr' of type '...' " - the check is about raw pointers so
we should see the actual raw type. From context the user may not understand why
actual type we have since it can be a typedef like `using my_ptr = int*`.
2) Write types in ticks, "'std::shared_ptr<A[]>' constructor" and
"'std::shared_ptr<A[]>::reset' may cause". Other check don't usually use
`(...)` pattern, so we should omit it.
https://github.com/llvm/llvm-project/pull/181570
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits