On 12/24/20 4:44 PM, Bruno Haible wrote:
Indeed, I don't see warnings in canonicalize-lgpl.c. But there are warnings
in gnulib's canonicalize.c:

Thanks, I fixed those, along one or two others I noticed when compiling with GCC (Ubuntu 10.2.0-13ubuntu1). Even though I didn't get these warnings with canonicalize-lgpl.c I guess they're likely to occur and anyway it's better to keep the two files in sync when possible. So I installed the attached patch, which should fix the issues you noticed and should also propagate the warnings patches into canonicalize-lgpl.c. I hope this fixes the bogus warnings that Adhemerval noticed when building glibc's stdlib/canonicalize.c.
From abc2b3fe5af97e971f10ebdbeee174f6d87f1fe6 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Thu, 24 Dec 2020 21:33:18 -0800
Subject: [PATCH] canonicalize, canonicalize-lgpl: remove lint

Pacify GCC.  Some of these problems were reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2020-12/msg00217.html
* lib/canonicalize-lgpl.c, lib/canonicalize.c:
Sort shared include directives, for consistency.
(IF_LINT): New macro.
(suffix_requires_dir_check): Mark with _GL_ATTRIBUTE_PURE.
* lib/canonicalize-lgpl.c (GCC_LINT, _GL_ATTRIBUTE_PURE) [_LIBC]:
New macros.
(realpath_stk): Suppress bogus -Wmaybe-uninitialized warning.
* lib/canonicalize.c (canonicalize_filename_mode_stk):
Omit unused local.  Suppress bogus -Wmaybe-uninitialized warning.
---
 ChangeLog               | 15 +++++++++++++++
 lib/canonicalize-lgpl.c | 15 ++++++++++++---
 lib/canonicalize.c      | 16 +++++++++++-----
 3 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8f27b286e..dff97afe4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2020-12-24  Paul Eggert  <egg...@cs.ucla.edu>
+
+	canonicalize, canonicalize-lgpl: remove lint
+	Pacify GCC.  Some of these problems were reported by Bruno Haible in:
+	https://lists.gnu.org/r/bug-gnulib/2020-12/msg00217.html
+	* lib/canonicalize-lgpl.c, lib/canonicalize.c:
+	Sort shared include directives, for consistency.
+	(IF_LINT): New macro.
+	(suffix_requires_dir_check): Mark with _GL_ATTRIBUTE_PURE.
+	* lib/canonicalize-lgpl.c (GCC_LINT, _GL_ATTRIBUTE_PURE) [_LIBC]:
+	New macros.
+	(realpath_stk): Suppress bogus -Wmaybe-uninitialized warning.
+	* lib/canonicalize.c (canonicalize_filename_mode_stk):
+	Omit unused local.  Suppress bogus -Wmaybe-uninitialized warning.
+
 2020-12-24  Bruno Haible  <br...@clisp.org>
 
 	spawn-pipe: Use posix_spawn by default on native Windows.
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c
index 8c8f98abc..68b6fdf6e 100644
--- a/lib/canonicalize-lgpl.c
+++ b/lib/canonicalize-lgpl.c
@@ -38,8 +38,8 @@
 #include <unistd.h>
 
 #include <eloop-threshold.h>
-#include <idx.h>
 #include <filename.h>
+#include <idx.h>
 #include <scratch_buffer.h>
 
 #ifdef _LIBC
@@ -50,6 +50,8 @@
 # else
 #  define FACCESSAT_NEVER_EOVERFLOWS true
 # endif
+# define GCC_LINT 1
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
 #else
 # define __canonicalize_file_name canonicalize_file_name
 # define __realpath realpath
@@ -82,6 +84,13 @@
 # define __stat stat
 #endif
 
+/* Suppress bogus GCC -Wmaybe-uninitialized warnings.  */
+#if defined GCC_LINT || defined lint
+# define IF_LINT(Code) Code
+#else
+# define IF_LINT(Code) /* empty */
+#endif
+
 #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
 # define DOUBLE_SLASH_IS_DISTINCT_ROOT false
 #endif
@@ -114,7 +123,7 @@ file_accessible (char const *file)
    component within END.  END must either be empty, or start with a
    slash.  */
 
-static bool
+static bool _GL_ATTRIBUTE_PURE
 suffix_requires_dir_check (char const *end)
 {
   /* If END does not start with a slash, the suffix is OK.  */
@@ -338,7 +347,7 @@ realpath_stk (const char *name, char *resolved,
               buf[n] = '\0';
 
               char *extra_buf = extra_buffer.data;
-              idx_t end_idx;
+              idx_t end_idx IF_LINT (= 0);
               if (end_in_extra_buffer)
                 end_idx = end - extra_buf;
               idx_t len = strlen (end);
diff --git a/lib/canonicalize.c b/lib/canonicalize.c
index 2c88335bf..e8b74d855 100644
--- a/lib/canonicalize.c
+++ b/lib/canonicalize.c
@@ -27,14 +27,21 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include <filename.h>
+#include <idx.h>
 #include <scratch_buffer.h>
 
 #include "attribute.h"
 #include "file-set.h"
-#include "idx.h"
 #include "hash-triple.h"
 #include "xalloc.h"
-#include "filename.h"
+
+/* Suppress bogus GCC -Wmaybe-uninitialized warnings.  */
+#if defined GCC_LINT || defined lint
+# define IF_LINT(Code) Code
+#else
+# define IF_LINT(Code) /* empty */
+#endif
 
 #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
 # define DOUBLE_SLASH_IS_DISTINCT_ROOT false
@@ -72,7 +79,7 @@ file_accessible (char const *file)
    component within END.  END must either be empty, or start with a
    slash.  */
 
-static bool
+static bool _GL_ATTRIBUTE_PURE
 suffix_requires_dir_check (char const *end)
 {
   /* If END does not start with a slash, the suffix is OK.  */
@@ -334,7 +341,6 @@ canonicalize_filename_mode_stk (const char *name, canonicalize_mode_t can_mode,
           dest = mempcpy (dest, start, startlen);
           *dest = '\0';
 
-          char discard;
           char *buf;
           ssize_t n = -1;
           if (!logical)
@@ -386,7 +392,7 @@ canonicalize_filename_mode_stk (const char *name, canonicalize_mode_t can_mode,
               buf[n] = '\0';
 
               char *extra_buf = extra_buffer.data;
-              idx_t end_idx;
+              idx_t end_idx IF_LINT (= 0);
               if (end_in_extra_buffer)
                 end_idx = end - extra_buf;
               idx_t len = strlen (end);
-- 
2.27.0

Reply via email to