r222009 - [Sema]. Warn when logical expression is a pointer

Timur Iskhodzhanov timurrrr at google.com
Tue Nov 18 06:40:47 PST 2014


$ cat test.cpp
#define MY_ASSERT(cond) ((cond)? (void)0 : (void)1)
#define BUG(description) MY_ASSERT(!description)

void foo (int some_condition)
{
  if (some_condition)
    BUG("oh this is broken");
}
$ clang -Werror -Wstring-conversion -c test.cpp
test.cpp:7:9: error: implicit conversion turns string literal into bool:
      'const char [18]' to 'bool' [-Werror,-Wstring-conversion]
    BUG("oh this is broken");
    ~~~~^~~~~~~~~~~~~~~~~~~~
test.cpp:2:37: note: expanded from macro 'BUG'
#define BUG(description) MY_ASSERT(!description)
                                    ^
test.cpp:1:27: note: expanded from macro 'MY_ASSERT'
#define MY_ASSERT(cond) ((cond)? (void)0 : (void)1)
                          ^
1 error generated.

On Mon Nov 17 2014 at 9:01:09 PM jahanian <fjahanian at apple.com> wrote:

>
> On Nov 17, 2014, at 7:18 AM, Timur Iskhodzhanov <timurrrr at google.com>
> wrote:
>
> Hi,
>
> This has broken our -Werror internal build.
> One specific thing that I consider a [noisy] false positive:
>
> #define MY_ASSERT(cond) ((cond)? (void)0 : blah)
> #define BUG(description) MY_ASSERT(!description)
> ...
> if (some_condition)
>   BUG("oh this is broken")
>
>
>
> I cannot reproduce this warning. This is the test I used:
>
> #define MY_ASSERT(cond) ((cond)? (void)0 : (void)1)
> #define BUG(description) MY_ASSERT(!description)
>
> void foo (int some_condition)
> {
>   if (some_condition)
>     BUG("oh this is broken");
> }
>
> Can you give a test case producing the warning?
>
> - Fariborz
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141118/727258c3/attachment.html>


More information about the cfe-commits mailing list