Skip to content

[clang-tidy] readability-implicit-bool-conversion is too noisy by default #159251

@firewave

Description

@firewave

Out-of-the-box the readability-implicit-bool-conversion is way too noisy to be usable.

AllowIntegerConditions and AllowPointerConditions should be set to true to be begin with as those are common patterns.

With those patterns allowed I would expect that I only get assignments where an implicit conversion is allowed (which might actually indicate an unintentional behavior so that pattern rather belongs into misc-* or bugprone-*). But usages in return statements will still produce warnings.

bool f2(int i, int* i1, int& i2)
{
    if (i) {
        return i;
    }
    if (i1) {
        return *i1;
    }
    return i2;
}
<source>:4:16: warning: implicit conversion 'int' -> 'bool' [readability-implicit-bool-conversion]
    4 |         return i;
      |                ^
      |                  != 0
<source>:7:16: warning: implicit conversion 'int' -> 'bool' [readability-implicit-bool-conversion]
    7 |         return *i1;
      |                ^  
      |                    != 0
<source>:9:12: warning: implicit conversion 'int' -> 'bool' [readability-implicit-bool-conversion]
    9 |     return i2;
      |            ^ 
      |               != 0

https://godbolt.org/z/jnWjbea13

This is also a very common pattern but it is not a condition and more akin to an assignment. So maybe that case should get additional (off by default) options. This is already tracked in #79447.

It is possible that there are more cases but it is hard to tell with the amount of warnings the check currently produces. There is also more related issues:
#63450
#36323

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang-tidyenhancementImproving things as opposed to bug fixing, e.g. new or missing feature

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions