[cfe-dev] clang-tidy: problem with readability-implicit-bool-conversion AllowPointerConditions
Simon Sandström via cfe-dev
cfe-dev at lists.llvm.org
Sat Sep 14 04:05:27 PDT 2019
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
More information about the cfe-dev
mailing list