Bug 78988

Summary: Wrong location of a binary expression for -Waddress
Product: gcc Reporter: Martin Liška <marxin>
Component: c++Assignee: Not yet assigned to anyone <unassigned>
Status: NEW ---    
Severity: normal CC: jakub, msebor, webrown.cpp
Priority: P3 Keywords: diagnostic
Version: unknown   
Target Milestone: ---   
See Also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78989
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78987
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2017-01-05 00:00:00
Bug Depends on:    
Bug Blocks: 103360    

Description Martin Liška 2017-01-04 16:24:50 UTC
This is C++ equivalent of PR78987

Starting from 4.8, where location description was added.

$ cat /tmp/wrong-conditions.c 
void foo() {}
void bar() {}
void baz() {}

int main2(int argc, int argc2)
{
  if (foo && bar && baz)
    return 1;

  return 0;
}

$ ./xg++ -B. /tmp/wrong-conditions.c -c -Wall
/tmp/wrong-conditions.c: In function ‘int main2(int, int)’:
/tmp/wrong-conditions.c:7:14: warning: the address of ‘void foo()’ will never be NULL [-Waddress]
   if (foo && bar && baz)
              ^~~
/tmp/wrong-conditions.c:7:14: warning: the address of ‘void bar()’ will never be NULL [-Waddress]
/tmp/wrong-conditions.c:7:21: warning: the address of ‘void baz()’ will never be NULL [-Waddress]
   if (foo && bar && baz)
                     ^~~

Where location of 'foo' is wrong and location for 'bar' is missing.
Comment 1 Martin Sebor 2017-01-05 02:52:55 UTC
Confirmed.  The location doesn't look right in C either where GCC prints the following:

b.c: In function ‘main2’:
b.c:7:7: warning: the address of ‘foo’ will always evaluate as ‘true’ [-Waddres]
   if (foo && bar && baz)
       ^~~
b.c:7:11: warning: the address of ‘bar’ will always evaluate as ‘true’ [-Waddress]
   if (foo && bar && baz)
           ^~
b.c:7:18: warning: the address of ‘baz’ will always evaluate as ‘true’ [-Waddress]
   if (foo && bar && baz)
                  ^~
Comment 2 Martin Liška 2018-11-02 07:52:03 UTC
David will you be interested in the PR?