CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
66 lines
1.5 KiB
ReStructuredText
66 lines
1.5 KiB
ReStructuredText
.. title:: clang-tidy - bugprone-misplaced-widening-cast
|
|
|
|
bugprone-misplaced-widening-cast
|
|
================================
|
|
|
|
This check will warn when there is a cast of a calculation result to a bigger
|
|
type. If the intention of the cast is to avoid loss of precision then the cast
|
|
is misplaced, and there can be loss of precision. Otherwise the cast is
|
|
ineffective.
|
|
|
|
Example code:
|
|
|
|
.. code-block:: c++
|
|
|
|
long f(int x) {
|
|
return (long)(x * 1000);
|
|
}
|
|
|
|
The result ``x * 1000`` is first calculated using ``int`` precision. If the
|
|
result exceeds ``int`` precision there is loss of precision. Then the result is
|
|
casted to ``long``.
|
|
|
|
If there is no loss of precision then the cast can be removed or you can
|
|
explicitly cast to ``int`` instead.
|
|
|
|
If you want to avoid loss of precision then put the cast in a proper location,
|
|
for instance:
|
|
|
|
.. code-block:: c++
|
|
|
|
long f(int x) {
|
|
return (long)x * 1000;
|
|
}
|
|
|
|
Implicit casts
|
|
--------------
|
|
|
|
Forgetting to place the cast at all is at least as dangerous and at least as
|
|
common as misplacing it. If :option:`CheckImplicitCasts` is enabled the check
|
|
also detects these cases, for instance:
|
|
|
|
.. code-block:: c++
|
|
|
|
long f(int x) {
|
|
return x * 1000;
|
|
}
|
|
|
|
Floating point
|
|
--------------
|
|
|
|
Currently warnings are only written for integer conversion. No warning is
|
|
written for this code:
|
|
|
|
.. code-block:: c++
|
|
|
|
double f(float x) {
|
|
return (double)(x * 10.0f);
|
|
}
|
|
|
|
Options
|
|
-------
|
|
|
|
.. option:: CheckImplicitCasts
|
|
|
|
If `true`, enables detection of implicit casts. Default is `false`.
|