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
56 lines
1.8 KiB
ReStructuredText
56 lines
1.8 KiB
ReStructuredText
.. title:: clang-tidy - bugprone-too-small-loop-variable
|
|
|
|
bugprone-too-small-loop-variable
|
|
================================
|
|
|
|
Detects those ``for`` loops that have a loop variable with a "too small" type
|
|
which means this type can't represent all values which are part of the
|
|
iteration range.
|
|
|
|
.. code-block:: c++
|
|
|
|
int main() {
|
|
long size = 294967296l;
|
|
for (short i = 0; i < size; ++i) {}
|
|
}
|
|
|
|
This ``for`` loop is an infinite loop because the ``short`` type can't
|
|
represent all values in the ``[0..size]`` interval.
|
|
|
|
In a real use case size means a container's size which depends on the
|
|
user input.
|
|
|
|
.. code-block:: c++
|
|
|
|
int doSomething(const std::vector& items) {
|
|
for (short i = 0; i < items.size(); ++i) {}
|
|
}
|
|
|
|
This algorithm works for a small amount of objects, but will lead to freeze for
|
|
a larger user input.
|
|
|
|
It's recommended to enable the compiler warning
|
|
`-Wtautological-constant-out-of-range-compare` as well, since check does
|
|
not inspect compile-time constant loop boundaries to avoid overlaps with
|
|
the warning.
|
|
|
|
Options
|
|
-------
|
|
|
|
.. option:: MagnitudeBitsUpperLimit
|
|
|
|
Upper limit for the magnitude bits of the loop variable. If it's set the check
|
|
filters out those catches in which the loop variable's type has more magnitude
|
|
bits as the specified upper limit. The default value is 16.
|
|
For example, if the user sets this option to 31 (bits), then a 32-bit ``unsigned int``
|
|
is ignored by the check, however a 32-bit ``int`` is not (A 32-bit ``signed int``
|
|
has 31 magnitude bits).
|
|
|
|
.. code-block:: c++
|
|
|
|
int main() {
|
|
long size = 294967296l;
|
|
for (unsigned i = 0; i < size; ++i) {} // no warning with MagnitudeBitsUpperLimit = 31 on a system where unsigned is 32-bit
|
|
for (int i = 0; i < size; ++i) {} // warning with MagnitudeBitsUpperLimit = 31 on a system where int is 32-bit
|
|
}
|