[Bug c/66425] (void) cast doesn't suppress __attribute__((warn_unused_result))
joseph at codesourcery dot com
gcc-bugzilla@gcc.gnu.org
Thu Jun 11 15:49:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425
--- Comment #16 from joseph at codesourcery dot com <joseph at codesourcery dot com> ---
I'd say that for any function for which use of this attribute is
appropriate, suppression of the warning should involve a detailed comment
explaining why the particular use of the function is so exceptional that,
very unusually, it is not possible to (for example) do anything useful
with the information that the function call failed or it is otherwise
exceptionally safe to ignore the result - and that any suppression of the
warning should involve extra-careful code review when added.
See, for example, how glibc handles use of diagnostic suppression pragmas,
via macros DIAG_PUSH_NEEDS_COMMENT, DIAG_IGNORE_NEEDS_COMMENT and
DIAG_POP_NEEDS_COMMENT, to make it extra-obvious if a patch is adding such
uses and to make it obvious at the use site that such comments are needed.
Now, the compiler cannot check whether an explanatory comment justifying
diagnostic suppression is present, and cannot know how a particular
project wishes to handle justifying exceptions to its normal coding style
rules. But it can make it as visible as possible that something unusual
and dubious is being done by ignoring the return value, to reduce the
chance of it slipping by reviewers.
I'd say that a warning suppressed by a (void) cast should be a separate
attribute, e.g. warn_unused_result_weak.
More information about the Gcc-bugs
mailing list