[cfe-dev] Warning when comparing address of function or variable with constant?

Matt Beaumont-Gay matthewbg at google.com
Tue Jan 3 08:20:42 PST 2012

On Tue, Jan 3, 2012 at 06:14, Ed Schouten <ed at 80386.nl> wrote:
> Hello all,
> This morning I fixed a small bug at FreeBSD that involved the following
> code:
>        void
>        func(struct foo *idx)
>        {
>                if (index == NULL)
>                        return;
>                ...
>        }
> The bug in this code is that we should have compared against idx -- not
> index. This works by accident, as index() is a function provided by our
> C library (BSD's strchr()).
> I think it is hardly ever possible that a function or variable ever
> resides at address 0, except in kernelspace or when using a hacked
> run-time linker. Does Clang have a warning for this?

Yes, -Wbool-conversions:

$ cat test.cc
int index();
void f(int* idx) {
  if (index)
$ ./build/bin/clang -fsyntax-only -Wbool-conversions test.cc
test.cc:3:7: warning: address of function 'index' will always evaluate
to 'true' [-Wbool-conversions]
  if (index)
test.cc:3:7: note: prefix with the address-of operator to silence this warning
  if (index)
1 warning generated.


More information about the cfe-dev mailing list