https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86568

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW

--- Comment #7 from Martin Sebor <msebor at gcc dot gnu.org> ---
There's still more work to do to make the argument location available to the
warning code (e.g., when passing the literal 0 or nullptr, or to the middle
end) so I'm going to leave this open, but for the following variant of the test
case in comment #0 GCC now prints the warnings below:

$ cat pr86568.C && gcc -O2 -S -Wall pr86568.C
void f(void*, void*) __attribute__((nonnull(2)));

struct A {
  void f(void*, void*) __attribute__((nonnull(2)));
};

int main()
{
  void * const p = 0;

  f(p, p);
  A().f(p, p);
}
pr86568.C: In function ‘int main()’:
pr86568.C:11:8: warning: argument 2 null where non-null expected [-Wnonnull]
   11 |   f(p, p);
      |        ^
pr86568.C:1:6: note: in a call to function ‘void f(void*, void*)’ declared
‘nonnull’
    1 | void f(void*, void*) __attribute__((nonnull(2)));
      |      ^
pr86568.C:12:9: warning: argument 1 null where non-null expected [-Wnonnull]
   12 |   A().f(p, p);
      |         ^
pr86568.C:4:8: note: in a call to function ‘void A::f(void*, void*)’ declared
‘nonnull’
    4 |   void f(void*, void*) __attribute__((nonnull(2)));
      |        ^

Reply via email to