From 616196a7bd54817dce8889ad85607abe3d539991 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 22 Jun 2018 23:33:58 +0200 Subject: [PATCH] backport: re PR c++/86210 (Missing -Wnonnull warning for function defined in the same TU) Backported from mainline 2018-06-20 Jakub Jelinek PR c++/86210 * c-common.c (check_nonnull_arg): Use fold_for_warn. Adjust obsolete comment. * g++.dg/warn/Wnonnull4.C: New test. From-SVN: r261970 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-common.c | 6 ++---- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/warn/Wnonnull4.C | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wnonnull4.C diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 00653a6029da..a3e153a13db3 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,6 +1,12 @@ 2018-06-22 Jakub Jelinek Backported from mainline + 2018-06-20 Jakub Jelinek + + PR c++/86210 + * c-common.c (check_nonnull_arg): Use fold_for_warn. Adjust obsolete + comment. + 2018-05-11 Jakub Jelinek PR c/85696 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index ade84866709b..45be4bd1cbe3 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -5434,10 +5434,8 @@ check_nonnull_arg (void *ctx, tree param, unsigned HOST_WIDE_INT param_num) if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE) return; - /* When not optimizing diagnose the simple cases of null arguments. - When optimization is enabled defer the checking until expansion - when more cases can be detected. */ - if (integer_zerop (param)) + /* Diagnose the simple cases of null arguments. */ + if (integer_zerop (fold_for_warn (param))) { warning_at (pctx->loc, OPT_Wnonnull, "null argument where non-null " "required (argument %lu)", (unsigned long) param_num); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b24c781d102a..65ecc947e5c3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -8,6 +8,9 @@ 2018-06-20 Jakub Jelinek + PR c++/86210 + * g++.dg/warn/Wnonnull4.C: New test. + PR tree-optimization/86231 * gcc.dg/tree-ssa/vrp119.c: New test. * gcc.c-torture/execute/pr86231.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull4.C b/gcc/testsuite/g++.dg/warn/Wnonnull4.C new file mode 100644 index 000000000000..d07a4452ddb5 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wnonnull4.C @@ -0,0 +1,21 @@ +// PR c++/86210 +// { dg-do compile } +// { dg-options "-Wnonnull" } + +void *declared_not_defined (void *p) __attribute__((nonnull)); + +inline void *declared_and_defined (void *p) __attribute__((nonnull)); + +int +main () +{ + int *const p = 0; + declared_not_defined (p); // { dg-warning "null argument where non-null required" } + declared_and_defined (p); // { dg-warning "null argument where non-null required" } +} + +void * +declared_and_defined (void *p) +{ + return p; +} -- 2.47.2