Thanks for explaining. I see that I completely missed the point. I changed the code back, and redid the comment in an attempt to try to explain things, as follows: --- ChangeLog | 8 ++++++++ lib/ignore-value.h | 10 ++++++---- 2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 61b5f40..21659ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2013-11-28 Paul Eggert <egg...@cs.ucla.edu> + + ignore-value: revert previous code change + * lib/ignore-value.h (ignore_value): Use __extension__ and + __typeof__ only for GCC 3.4 and later. Reported by Eric Blake in + <http://lists.gnu.org/archive/html/bug-gnulib/2013-11/msg00102.html>. + Change the comment to try to explain this better. + 2013-11-27 Pádraig Brady <p...@draigbrady.com> selinux-h: improve stub types and add more stub functions diff --git a/lib/ignore-value.h b/lib/ignore-value.h index f079a06..633c44a 100644 --- a/lib/ignore-value.h +++ b/lib/ignore-value.h @@ -35,10 +35,12 @@ #ifndef _GL_IGNORE_VALUE_H #define _GL_IGNORE_VALUE_H -/* The __attribute__((__warn_unused_result__)) feature is available in - gcc versions 3.4 and newer, while __typeof__ and __extension__ have - been available since 2.0 at least. */ -#if 2 <= __GNUC__ +/* Normally casting an expression to void discards its value, but GCC + versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) + which may cause unwanted diagnostics in that case. Use __typeof__ + and __extension__ to work around the problem, if the workaround is + known to be needed. */ +#if 3 < __GNUC__ + (4 <= __GNUC_MINOR__) # define ignore_value(x) \ (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) #else -- 1.8.3.1