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
96 lines
2.3 KiB
ReStructuredText
96 lines
2.3 KiB
ReStructuredText
.. title:: clang-tidy - bugprone-unhandled-code-paths
|
|
|
|
bugprone-unhandled-code-paths
|
|
=============================
|
|
|
|
This check discovers situations where code paths are not fully-covered.
|
|
It furthermore suggests using ``if`` instead of ``switch`` if the code
|
|
will be more clear.
|
|
|
|
``if-else if`` chains that miss a final ``else`` branch might lead to
|
|
unexpected program execution and be the result of a logical error.
|
|
If the missing ``else`` branch is intended you can leave it empty with
|
|
a clarifying comment.
|
|
This warning can be noisy on some code bases, so it is disabled by default.
|
|
|
|
.. code-block:: c++
|
|
|
|
void f1() {
|
|
int i = determineTheNumber();
|
|
|
|
if(i > 0) {
|
|
// Some Calculation
|
|
} else if (i < 0) {
|
|
// Precondition violated or something else.
|
|
}
|
|
// ...
|
|
}
|
|
|
|
Similar arguments hold for ``switch`` statements which do not cover all
|
|
possible code paths.
|
|
|
|
.. code-block:: c++
|
|
|
|
// The missing default branch might be a logical error. It can be kept empty
|
|
// if there is nothing to do, making it explicit.
|
|
void f2(int i) {
|
|
switch (i) {
|
|
case 0: // something
|
|
break;
|
|
case 1: // something else
|
|
break;
|
|
}
|
|
// All other numbers?
|
|
}
|
|
|
|
// Violates this rule as well, but already emits a compiler warning (-Wswitch).
|
|
enum Color { Red, Green, Blue, Yellow };
|
|
void f3(enum Color c) {
|
|
switch (c) {
|
|
case Red: // We can't drive for now.
|
|
break;
|
|
case Green: // We are allowed to drive.
|
|
break;
|
|
}
|
|
// Other cases missing
|
|
}
|
|
|
|
|
|
Every ``switch`` statement should have at least two ``case`` labels
|
|
other than a `default` label.
|
|
Otherwise, the ``switch`` could be better expressed with an ``if`` statement.
|
|
Degenerated ``switch`` statements without any labels are caught as well.
|
|
|
|
.. code-block:: c++
|
|
|
|
// Degenerated switch that could be better written as `if`
|
|
int i = 42;
|
|
switch(i) {
|
|
case 1: // do something here
|
|
default: // do something else here
|
|
}
|
|
|
|
// Should rather be the following:
|
|
if (i == 1) {
|
|
// do something here
|
|
}
|
|
else {
|
|
// do something here
|
|
}
|
|
|
|
|
|
.. code-block:: c++
|
|
|
|
// A completely degenerated switch will be diagnosed.
|
|
int i = 42;
|
|
switch(i) {}
|
|
|
|
|
|
Options
|
|
-------
|
|
|
|
.. option:: WarnOnMissingElse
|
|
|
|
Boolean flag that activates a warning for missing ``else`` branches.
|
|
Default is `false`.
|