This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Disabling warn_unused_result warnings on a case-by-case basis


On 14/06/16 10:32, Florian Weimer wrote:
A long time ago, GCC decided that warn_unused_result warnings should *not* be
silenced by casting to void, as in:

   (void) write (STDOUT_FILENO, message, strlen (message));

Apparently, programmers have figured out to use this idiom as a replacement:

   if (write (STDOUT_FILENO, message, strlen (message))) { }

I'm not sure if this is an improvement.  The (void) idiom seems to make the
programmer intention more explicit.

Maybe it's time to reconsider and suppress the warning for casts to (void), too?

There is a thorough discussion and some analysis here:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425

I think most of the pushback against the (void) idiom has actually come from GNU libc in the past.

One possible solution, if both behaviours are desired, is to warn for the void idiom only for a new -Wstrict-unused-result, such that:

write (STDOUT_FILENO, message, strlen (message));
// warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
(void) write (STDOUT_FILENO, message, strlen (message));
// warning: ignoring return value of âfooâ, declared with attribute warn_unused_result [-Wstrict-unused-result]

and -Wno-strict-unused-result disables warnings for (void).

But perhaps it is simpler to just change the default. It seems unlikely to use (void) unintentionally.

Cheers,

	Manuel.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]