Hi!

This patch fixes a regression caused by C++ delayed folding, when
check_nonnull_arg is called, the arguments aren't folded yet and so unlike
GCC 4.8 and earlier we don't report -Wnonnull warning unless the argument is
literal NULL without any folding.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
trunk?  Is this something we should backport (at least to 8.2) or not?

2018-06-20  Jakub Jelinek  <ja...@redhat.com>

        PR c++/86210
        * c-common.c (check_nonnull_arg): Use fold_for_warn.  Adjust obsolete
        comment.

        * g++.dg/warn/Wnonnull4.C: New test.

--- gcc/c-family/c-common.c.jj  2018-06-20 08:15:20.697849713 +0200
+++ gcc/c-family/c-common.c     2018-06-20 12:14:27.828098317 +0200
@@ -5404,10 +5404,8 @@ check_nonnull_arg (void *ctx, tree param
   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);
--- gcc/testsuite/g++.dg/warn/Wnonnull4.C.jj    2018-06-20 12:21:50.424552232 
+0200
+++ gcc/testsuite/g++.dg/warn/Wnonnull4.C       2018-06-20 12:20:47.356487553 
+0200
@@ -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;
+}

        Jakub

Reply via email to