[cfe-dev] clang-tidy: problem with readability-implicit-bool-conversion AllowPointerConditions

Yitzhak Mandelbaum via cfe-dev cfe-dev at lists.llvm.org
Wed Sep 18 06:10:37 PDT 2019


In the second case, you're not using it in a condition context -- it's just
a normal boolean-valued expression.  The flag only disables the check when
these implicit casts appear in the context of "conditions": if, while, for,
etc.  Here's the relevant code:

https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp#L220

The documentation (
https://clang.llvm.org/extra/clang-tidy/checks/readability-implicit-bool-conversion.html)
could arguably use some clarification.

On Sat, Sep 14, 2019 at 7:05 AM Simon Sandström via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> On 13/09, Oleg Smolsky wrote:
> > On 2019-09-12 09:55, Simon Sandström via cfe-dev wrote:
> > > Hello,
> > >
> > > I'm getting an implicit conversion warning on a piece of code that
> (from
> > > my understanding) I shouldn't. Most likely my understanding is
> incorrect
> > > :-)
> > >
> > > The piece of code is:
> > >
> > > bool test1(const int* ptr, int other)
> > > {
> > >    if (ptr) {
> > >      return *ptr == other;
> > >    }
> > >    return false;
> > > }
> > >
> > > bool test2(const int* ptr, int other)
> > > {
> > >    return ptr && *ptr == other;
> > > }
> > >
> > > With AllowPointerConditions unset (0) I'm getting warnings both from
> > > test1 and test2. With AllowPointerConditions set (1) I'm still getting
> a
> > > warning from test2. Why is that? I guess that I don't understand the
> > > 'conditional' part of this option...
> >
> > I believe both tests are equivalent as far as C++ language semantics go -
> > you are using a pointer as a boolean inside a conditional expression. In
> the
> > first case you have an explicit "if" yet in the second you there is a
> > logical expression inside the "return". That is, you can rewrite both
> with
> > "ptr != nullptr" to silence the warning.
> >
> > Oleg.
> >
>
> Well yes, I can silence it by explicitly comparing it to nullptr, but
> shouldn't it by silenced by using the AllowPointerConditions option as
> well? In both cases above, that is.
>
> - Simon
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190918/be0c8c81/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4847 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190918/be0c8c81/attachment.bin>


More information about the cfe-dev mailing list