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