Fix PR c++/96310 - Ignoring -Wnonnull via pragma gcc diagnostics still produces an unwanted note.

gcc/c-family/ChangeLog:
	PR c++/96310
	* c-common.c (check_nonnull_arg): Print note only when warning was
	issued.
This commit is contained in:
Martin Sebor 2020-07-25 14:21:47 -06:00
parent 8d0b2b3374
commit e0633768a1
2 changed files with 22 additions and 2 deletions

View File

@ -5538,7 +5538,7 @@ check_nonnull_arg (void *ctx, tree param, unsigned HOST_WIDE_INT param_num)
{
warned = warning_at (loc, OPT_Wnonnull,
"%qs pointer null", "this");
if (pctx->fndecl)
if (warned && pctx->fndecl)
inform (DECL_SOURCE_LOCATION (pctx->fndecl),
"in a call to non-static member function %qD",
pctx->fndecl);
@ -5548,7 +5548,7 @@ check_nonnull_arg (void *ctx, tree param, unsigned HOST_WIDE_INT param_num)
warned = warning_at (loc, OPT_Wnonnull,
"argument %u null where non-null expected",
(unsigned) param_num);
if (pctx->fndecl)
if (warned && pctx->fndecl)
inform (DECL_SOURCE_LOCATION (pctx->fndecl),
"in a call to function %qD declared %qs",
pctx->fndecl, "nonnull");

View File

@ -0,0 +1,20 @@
/* PR c++/96310 - Ignoring -Wnonnull via pragma gcc diagnostics still produces
an unwanted note
{ dg-do compile }
{ dg-options "-Wall" } */
struct C {
void f (); // { dg-message "in a call" }
void g (); // { dg-bogus "in a call" }
};
void f ()
{
static_cast<C*>(0)->f (); // { dg-warning "\\\[-Wnonnull" }
}
void g ()
{
#pragma GCC diagnostic ignored "-Wnonnull"
static_cast<C*>(0)->g ();
}