================
@@ -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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits