================
@@ -0,0 +1,34 @@
+// RUN: %check_clang_tidy -std=c++20-or-later %s bugprone-bit-cast-pointers %t
+
+namespace std
+{
+template <typename To, typename From>
+To bit_cast(From from)
+{
+  // Dummy implementation for the purpose of the test.
+  // We don't want to include <cstring> to get std::memcpy.
+  To to{};
+  return to;
+}
+}
+
+void pointer2pointer()
+{
+  int x{};
+  float bad = *std::bit_cast<float*>(&x); // UB, but looks safe due to 
std::bit_cast
+  // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: do not use std::bit_cast on 
pointers; use it on values instead [bugprone-bit-cast-pointers]
+  float good = std::bit_cast<float>(x);   // Well-defined
+}
----------------
5chmidti wrote:

Could you add
```c++
  using IntPtr = int*;
  using FloatPtr = float*;
  IntPtr i;
  float bad2 = *std::bit_cast<FloatPtr>(i);
```
to the test as well? It passes, but aliased types should be tested as well.

https://github.com/llvm/llvm-project/pull/108083
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to