================ @@ -27,6 +27,39 @@ This check will flag: - All applications of binary operators with a narrowing conversions. For example: ``int i; i+= 0.1;``. +Arithmetic with smaller integer types than ``int`` trigger implicit conversions, +as explained under `"Integral Promotion" on cppreference.com +<https://en.cppreference.com/w/cpp/language/implicit_conversion>`_. +This check diagnoses more instances of narrowing than the compiler warning +`-Wconversion` does. The example below demonstrates this behavior. + +.. code-block:: c++ + + // The following function definition demonstrates usage of arithmetic with + // integer types smaller than `int` and how the narrowing conversion happens + // implicitly. + void computation(short argument1, short argument2) { + // Arithmetic written by humans: + short result = argument1 + argument2; + // Arithmetic actually performed by C++: + short result = static_cast<short>(static_cast<int>(argument1) + static_cast<int>(argument2)); + } + + void recommended_resolution(short argument1, short argument2) { + short result = argument1 + argument2; + // ^ warning: narrowing conversion from 'int' to signed type 'short' is implementation-defined + + // The recommended way to resolve this issue with the GSL is one of two ways. + // Either by a cast that throws if a loss of precision would occur. ---------------- JonasToth wrote:
Updated. https://github.com/llvm/llvm-project/pull/118209 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits