diff mbox series

libext2fs: fix unused parameter warnings/errors

Message ID 20240527091542.4121237-2-hi@alyssa.is
State New
Headers show
Series libext2fs: fix unused parameter warnings/errors | expand

Commit Message

Alyssa Ross May 27, 2024, 9:15 a.m. UTC
This fixes building dependent packages that use -Werror.

Signed-off-by: Alyssa Ross <hi@alyssa.is>
---
I'm assuming here that it is actually intentional that these variables 
are unused!  I don't understand the code enough to know for sure — 
I'm just trying to fix some build regressions after updating e2fsprogs. :)

 lib/ext2fs/ext2fs.h | 5 +++++
 1 file changed, 5 insertions(+)


base-commit: 950a0d69c82b585aba30118f01bf80151deffe8c

Comments

Theodore Ts'o May 28, 2024, 6:49 a.m. UTC | #1
On Mon, May 27, 2024 at 11:15:43AM +0200, Alyssa Ross wrote:
> This fixes building dependent packages that use -Werror.
> 
> Signed-off-by: Alyssa Ross <hi@alyssa.is>
> ---
> I'm assuming here that it is actually intentional that these variables 
> are unused!  I don't understand the code enough to know for sure — 
> I'm just trying to fix some build regressions after updating e2fsprogs. :)

Well, note that you only get the warning at all if you use
-Wunused-parameter, "-Wunused -Wextra", or "-Wall -Wextra".  The
unused-parameter warning is not enabled unless you **really** go out
of your way to enable it, because it has so many false positives.  The
gcc maintainers do not enable this insanity even with -Wall, so
someone really went out of their way to make your life miserable.  :-)

I generally think it's a really bad idea to turn on warnings as if
they are overdone Christmas tree lights.  However, to accomodate this,
the normal way to suppress this is via __attribute__(unused).  To do
this in a portable way to avoid breaking compilers which don't
understand said attribute:

/* this is usually predfined in some header file like compiler.h */
#ifdef __GNUC__
#define EXT2FS_ATTR(x) __attribute__(x)
#else
#define EXT2FS_ATTR(x)
#endif

...
_INLINE_ errcode_t ext2fs_resize_mem(unsigned long EXT2FS_ATTR((unused)) old_size,
				     unsigned long size, void *ptr)
...

You can also play this game if you really have a huge number of stupid
gcc warnings that you want to suppress:

/* this is usually predfined in some header file like compiler.h */
#ifndef __GNUC_PREREQ
#if defined(__GNUC__) && defined(__GNUC_MINOR__)
#define __GNUC_PREREQ(maj, min) \
	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else
#define __GNUC_PREREQ(maj, min) 0
#endif
#endif

#if __GNUC_PREREQ (4, 6)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif

...

#if __GNUC_PREREQ (4, 6)
#pragma GCC diagnostic pop
#endif

I do this when I'm defining a lot of inline functions in a header
file, and some stupid person thinks that -Wunused -Wextra is actually
a good idea (hint: it's not), and I just want to shut up the
completely unnecessary warnings.

Cheers,

					- Ted
Alyssa Ross May 28, 2024, 7:21 a.m. UTC | #2
"Theodore Ts'o" <tytso@mit.edu> writes:

> On Mon, May 27, 2024 at 11:15:43AM +0200, Alyssa Ross wrote:
>> This fixes building dependent packages that use -Werror.
>> 
>> Signed-off-by: Alyssa Ross <hi@alyssa.is>
>> ---
>> I'm assuming here that it is actually intentional that these variables 
>> are unused!  I don't understand the code enough to know for sure — 
>> I'm just trying to fix some build regressions after updating e2fsprogs. :)
>
> Well, note that you only get the warning at all if you use
> -Wunused-parameter, "-Wunused -Wextra", or "-Wall -Wextra".  The
> unused-parameter warning is not enabled unless you **really** go out
> of your way to enable it, because it has so many false positives.  The
> gcc maintainers do not enable this insanity even with -Wall, so
> someone really went out of their way to make your life miserable.  :-)

Yeah…
https://github.com/storaged-project/libblockdev/blob/7cd19d14e61c8964187eac99cf276e6c999dc93e/src/plugins/fs/Makefile.am#L5

(In this case it /did/ end up with me having to look at the code and
notice the SIZEOF_SIZE_T bug I sent another patch for, so something
useful did actually come out of it this time…)

> I generally think it's a really bad idea to turn on warnings as if
> they are overdone Christmas tree lights.  However, to accomodate this,
> the normal way to suppress this is via __attribute__(unused).  To do
> this in a portable way to avoid breaking compilers which don't
> understand said attribute:
>
> /* this is usually predfined in some header file like compiler.h */
> #ifdef __GNUC__
> #define EXT2FS_ATTR(x) __attribute__(x)
> #else
> #define EXT2FS_ATTR(x)
> #endif
>
> ...
> _INLINE_ errcode_t ext2fs_resize_mem(unsigned long EXT2FS_ATTR((unused)) old_size,
> 				     unsigned long size, void *ptr)
> ...

Okay, I'll send a v2 using this approach.

> You can also play this game if you really have a huge number of stupid
> gcc warnings that you want to suppress:
>
> /* this is usually predfined in some header file like compiler.h */
> #ifndef __GNUC_PREREQ
> #if defined(__GNUC__) && defined(__GNUC_MINOR__)
> #define __GNUC_PREREQ(maj, min) \
> 	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
> #else
> #define __GNUC_PREREQ(maj, min) 0
> #endif
> #endif
>
> #if __GNUC_PREREQ (4, 6)
> #pragma GCC diagnostic push
> #pragma GCC diagnostic ignored "-Wunused-function"
> #pragma GCC diagnostic ignored "-Wunused-parameter"
> #endif
>
> ...
>
> #if __GNUC_PREREQ (4, 6)
> #pragma GCC diagnostic pop
> #endif
>
> I do this when I'm defining a lot of inline functions in a header
> file, and some stupid person thinks that -Wunused -Wextra is actually
> a good idea (hint: it's not), and I just want to shut up the
> completely unnecessary warnings.
>
> Cheers,
>
> 					- Ted
diff mbox series

Patch

diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 6e87829f..a1ce192b 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -592,6 +592,8 @@  static inline __u32 __encode_extra_time(time_t seconds, __u32 nsec)
 #if (SIZEOF_TIME_T > 4)
 	extra = ((seconds - (__s32)(seconds & 0xffffffff)) >> 32) &
 		EXT4_EPOCH_MASK;
+#else
+	(void)seconds;
 #endif
 	return extra | (nsec << EXT4_EPOCH_BITS);
 }
@@ -600,6 +602,8 @@  static inline time_t __decode_extra_sec(time_t seconds, __u32 extra)
 #if (SIZEOF_TIME_T > 4)
 	if (extra & EXT4_EPOCH_MASK)
 		seconds += ((time_t)(extra & EXT4_EPOCH_MASK) << 32);
+#else
+	(void)extra;
 #endif
 	return seconds;
 }
@@ -642,6 +646,7 @@  static inline void __sb_set_tstamp(__u32 *lo, __u8 *hi, time_t seconds)
 static inline time_t __sb_get_tstamp(__u32 *lo, __u8 *hi)
 {
 #if (SIZEOF_TIME_T == 4)
+	(void)hi;
 	return *lo;
 #else
 	return ((time_t)(*hi) << 32) | *lo;