bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: coreutils snapshot vs gcc7-to-be: new test-calloc-gnu.c and test-can


From: Bruno Haible
Subject: Re: coreutils snapshot vs gcc7-to-be: new test-calloc-gnu.c and test-canonicalize.c warnings
Date: Sat, 04 Mar 2017 11:33:15 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-64-generic; KDE/5.18.0; x86_64; ; )

Jim Meyering wrote:
> test-canonicalize.c:78:13: error: argument 1 null where non-null
> expected [-Werror=nonnull]
>      result1 = canonicalize_file_name (null_ptr ());
>      ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This should fix it.


2017-03-04  Bruno Haible  <address@hidden>

        tests: Avoid compiler warning about uses of null_ptr.
        * tests/null-ptr.h: New file.
        * tests/test-canonicalize.c: Include null-ptr.h.
        (null_ptr): Remove function.
        * tests/test-canonicalize-lgpl.c: Likewise.
        * tests/test-memmem.c: Likewise.
        * tests/test-ptsname_r.c: Likewise.
        * modules/canonicalize-tests (Files): Add tests/null-ptr.h.
        * modules/canonicalize-lgpl-tests: Likewise.
        * modules/memmem-tests: Likewise.
        * modules/ptsname_r-tests: Likewise.
        Reported by Jim Meyering.

diff --git a/tests/null-ptr.h b/tests/null-ptr.h
new file mode 100644
index 0000000..6743645
--- /dev/null
+++ b/tests/null-ptr.h
@@ -0,0 +1,33 @@
+/* Return a NULL pointer, without letting the compiler know it.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+/* Return NULL.
+   Usual compilers are not able to infer something about the return value.  */
+static void *
+null_ptr (void)
+{
+  unsigned int x = rand ();
+  unsigned int y = x * x;
+  if (y & 2)
+    return (void *) -1;
+  else
+    return (void *) 0;
+}
+
+/* If you want to know why this always returns NULL, read
+   https://en.wikipedia.org/wiki/Quadratic_residue#Prime_power_modulus .  */
diff --git a/tests/test-canonicalize-lgpl.c b/tests/test-canonicalize-lgpl.c
index af20a0a..c449f98 100644
--- a/tests/test-canonicalize-lgpl.c
+++ b/tests/test-canonicalize-lgpl.c
@@ -33,16 +33,12 @@ SIGNATURE_CHECK (canonicalize_file_name, char *, (const 
char *));
 
 #include "same-inode.h"
 #include "ignore-value.h"
+
+#include "null-ptr.h"
 #include "macros.h"
 
 #define BASE "t-can-lgpl.tmp"
 
-static void *
-null_ptr (void)
-{
-  return NULL;
-}
-
 int
 main (void)
 {
diff --git a/tests/test-canonicalize.c b/tests/test-canonicalize.c
index 0ba89fe..37a1126 100644
--- a/tests/test-canonicalize.c
+++ b/tests/test-canonicalize.c
@@ -30,16 +30,12 @@
 
 #include "same-inode.h"
 #include "ignore-value.h"
+
+#include "null-ptr.h"
 #include "macros.h"
 
 #define BASE "t-can.tmp"
 
-static void *
-null_ptr (void)
-{
-  return NULL;
-}
-
 int
 main (void)
 {
diff --git a/tests/test-memmem.c b/tests/test-memmem.c
index bbca811..b2c23e6 100644
--- a/tests/test-memmem.c
+++ b/tests/test-memmem.c
@@ -26,15 +26,10 @@ SIGNATURE_CHECK (memmem, void *, (void const *, size_t, 
void const *, size_t));
 #include <stdlib.h>
 #include <unistd.h>
 
+#include "null-ptr.h"
 #include "zerosize-ptr.h"
 #include "macros.h"
 
-static void *
-null_ptr (void)
-{
-  return NULL;
-}
-
 int
 main (int argc, char *argv[])
 {
diff --git a/tests/test-ptsname_r.c b/tests/test-ptsname_r.c
index ed75ce7..2faf4c7 100644
--- a/tests/test-ptsname_r.c
+++ b/tests/test-ptsname_r.c
@@ -31,6 +31,7 @@ SIGNATURE_CHECK (ptsname_r, int, (int, char *, size_t));
 
 #include "same-inode.h"
 
+#include "null-ptr.h"
 #include "macros.h"
 
 /* Compare two slave names.
@@ -53,12 +54,6 @@ same_slave (const char *slave_name1, const char *slave_name2)
               && SAME_INODE (statbuf1, statbuf2)));
 }
 
-static char *
-null_ptr (void)
-{
-  return NULL;
-}
-
 static void
 test_errors (int fd, const char *slave)
 {
diff --git a/modules/canonicalize-lgpl-tests b/modules/canonicalize-lgpl-tests
index fd49d69..22b6b7f 100644
--- a/modules/canonicalize-lgpl-tests
+++ b/modules/canonicalize-lgpl-tests
@@ -1,6 +1,7 @@
 Files:
 tests/test-canonicalize-lgpl.c
 tests/signature.h
+tests/null-ptr.h
 tests/macros.h
 
 Depends-on:
diff --git a/modules/canonicalize-tests b/modules/canonicalize-tests
index 6019349..e043a8d 100644
--- a/modules/canonicalize-tests
+++ b/modules/canonicalize-tests
@@ -1,5 +1,6 @@
 Files:
 tests/test-canonicalize.c
+tests/null-ptr.h
 tests/macros.h
 
 Depends-on:
diff --git a/modules/memmem-tests b/modules/memmem-tests
index 4738d5c..28c0091 100644
--- a/modules/memmem-tests
+++ b/modules/memmem-tests
@@ -1,7 +1,8 @@
 Files:
 tests/test-memmem.c
-tests/zerosize-ptr.h
 tests/signature.h
+tests/null-ptr.h
+tests/zerosize-ptr.h
 tests/macros.h
 m4/mmap-anon.m4
 
diff --git a/modules/ptsname_r-tests b/modules/ptsname_r-tests
index 50b3f81..8f7928e 100644
--- a/modules/ptsname_r-tests
+++ b/modules/ptsname_r-tests
@@ -1,6 +1,7 @@
 Files:
 tests/test-ptsname_r.c
 tests/signature.h
+tests/null-ptr.h
 tests/macros.h
 
 Depends-on:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]