Pádraig Brady wrote: > I noticed the use of ignore-value() recently and > was a little confused by it. How about the attached tweaks > to make it explicit it doesn't handle all return types > and also remove the use of __attribute__ ((__unused__)) > which I don't think is required.
I think you're right that __attribute__ ((__unused__)) is unnecessary here. While "(void)" does not quiet gcc's warn_unused_result attribute warning, it does do the job for an otherwise unused parameter. > Subject: [PATCH] ignore-value: support old compilers and pointer types > > * lib/ignore-value.h: Add a function to suppress warnings > from fuctions that return pointers, and to make it explicit > that one function doesn't handle all cases. Also don't use > __attribute__ ((unused)) as it's too verbose/non standard Regarding the log message, I don't think there's a problem with portability. Either that __attribute__ directives is used and accepted, or gcc is so old that it doesn't support it, so it's compiled out -- but when gcc is that old, we don't have to worry about warn_unused_result attributes either, so that's fine. Hmm... I guess you could be thinking about warnings from non-gcc compilers. Yes, that's another way in which (void)i is better. How about this adjusted patch? >From af0fafc96bfa9ba20b9786d945d27401f05038ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com> Date: Wed, 12 Aug 2009 09:37:56 +0100 Subject: [PATCH] ignore-value: handle pointer types, too * lib/ignore-value.h (__attribute__): Remove definition. (ignore_value): Remove use of "__attribute__ ((unused))" in favor of a more concise and more-often effective "(void) i" statement. (ignore_ptr): New function to suppress warnings from functions that return pointers, and to make it explicit that one function doesn't handle all cases. --- ChangeLog | 10 ++++++++++ lib/ignore-value.h | 20 ++++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 952e5c8..fb7d7dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-08-26 Pádraig Brady <p...@draigbrady.com> + + ignore-value: handle pointer types, too + * lib/ignore-value.h (__attribute__): Remove definition. + (ignore_value): Remove use of "__attribute__ ((unused))" in favor + of a more concise and more-often effective "(void) i" statement. + (ignore_ptr): New function to suppress warnings from functions that + return pointers, and to make it explicit that one function doesn't + handle all cases. + 2009-08-25 Bruno Haible <br...@clisp.org> dup2: work around a Linux bug. diff --git a/lib/ignore-value.h b/lib/ignore-value.h index 5f97c91..86cfad7 100644 --- a/lib/ignore-value.h +++ b/lib/ignore-value.h @@ -1,6 +1,6 @@ -/* ignore a value to quiet a compiler warning +/* ignore a function return without a compiler warning - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008-2009 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 @@ -17,13 +17,7 @@ /* Written by Jim Meyering. */ -#ifndef __attribute__ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) -# define __attribute__(x) -# endif -#endif - -/* Use this function to avoid a warning when using a function declared with +/* Use these functions to avoid a warning when using a function declared with gcc's warn_unused_result attribute, but for which you really do want to ignore the result. Traditionally, people have used a "(void)" cast to indicate that a function's return value is deliberately unused. However, @@ -38,8 +32,6 @@ "copy.c:233: warning: ignoring return value of 'fchown', declared with attribute warn_unused_result". */ -static inline void -ignore_value (int i __attribute__ ((__unused__))) -{ - /* empty */ -} +static inline void ignore_value (int i) { (void) i; } +static inline void ignore_ptr (void* p) { (void) p; } +/* FIXME: what about aggregate types? */ -- 1.6.4.1.341.gf2a44