[clang-tools-extra] [clang-tidy] Add new check bugprone-unintended-char-ostream-output (PR #127720)
Carlos Galvez via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 23 11:03:30 PST 2025
================
@@ -0,0 +1,30 @@
+.. title:: clang-tidy - bugprone-unintended-char-ostream-output
+
+bugprone-unintended-char-ostream-output
+=======================================
+
+Finds unintended character output from ``unsigned char`` and ``signed char`` to an
+``ostream``.
+
+Normally, when ``unsigned char (uint8_t)`` or ``signed char (int8_t)`` is used, it
+is more likely a number than a character. However, when it is passed directly to
+``std::ostream``'s ``operator<<``, resulting in character-based output instead
+of numeric value. This often contradicts the developer's intent to print
+integer values.
+
+.. code-block:: c++
+
+ uint8_t v = 9;
+ std::cout << v; // output '\t' instead of '9'
+
+It could be fixed as
+
+.. code-block:: c++
+
+ std::cout << static_cast<uint32_t>(v);
----------------
carlosgalvezp wrote:
Absolutely, this is a valid code pattern (magic or not) that the tool should not warn about.
In the docs, if wanted, we could mention both cases as examples, and also explain that unary plus leads to the same result as `static_cast<int>`.
https://github.com/llvm/llvm-project/pull/127720
More information about the cfe-commits
mailing list