================
@@ -0,0 +1,32 @@
+.. title:: clang-tidy - bugprone-casting-through-void
+
+bugprone-casting-through-void
+=============================
+
+A check detects unsafe or redundant two-step casting operations involving 
``void*``.
+
+Two-step type conversions via void* are discouraged for several reasons.
+
+1. They obscure code and impede its understandability, complicating 
maintenance.
+2. These conversions bypass valuable compiler support, erasing warnings related
+   to pointer alignment. It may violate strict aliasing rule and leading to
+   undefined behavior.
+3. In scenarios involving multiple inheritance, ambiguity and unexpected 
outcomes
+   can arise due to the loss of type information, posing runtime issues.
+
+In summary, avoiding two-step type conversions through void* ensures clearer 
code,
+maintains essential compiler warnings, and prevents ambiguity and potential 
runtime
+errors, particularly in complex inheritance scenarios.
+
+Examples:
+
+.. code-block:: c++
+   using IntegerPointer = int *;
+   double *ptr;
+
+   static_cast<IntegerPointer>(static_cast<void *>(ptr)); // WRONG
+   reinterpret_cast<IntegerPointer>(reinterpret_cast<void *>(ptr)); // WRONG
+   (IntegerPointer)(void *)ptr; // WRONG
+   IntegerPointer(static_cast<void *>(ptr)); // WRONG
+
+   __bultin_bit_cast(IntegerPointer, static_cast<void *>(ptr)) // GOOD, 
__builtin_bit_cast is used to implement std::bit_cast
----------------
PiotrZSL wrote:

I don't think we should put __bultin_bit_cast into example.

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

Reply via email to