This patch adds a wrapper macro __rte_warn_unused_result for the warn_unused_result function attribute.
Marking a function __rte_warn_unused_result will make the compiler emit a warning in case the caller does not use the function's return value. Changes since RFC: * Include usage recommendation and GCC peculiarities in the macro documentation. Acked-by: Bruce Richardson <bruce.richard...@intel.com> Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com> --- lib/eal/include/rte_common.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h index 4a399cc7c8..67587025ab 100644 --- a/lib/eal/include/rte_common.h +++ b/lib/eal/include/rte_common.h @@ -222,6 +222,31 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) */ #define __rte_noreturn __attribute__((noreturn)) +/** + * Issue a warning in case the function's return value is ignored. + * + * The use of this attribute should be restricted to cases where + * ignoring the marked function's return value is almost always a + * bug. With GCC, some effort is required to make clear that ignoring + * the return value is intentional. The usual void-casting method to + * mark something unused as used does not suppress the warning with + * this compiler. + * + * @code{.c} + * __rte_warn_unused_result int foo(); + * + * void ignore_foo_result(void) { + * foo(); // generates a warning with all compilers + * + * (void)foo(); // still generates the warning with GCC (but not clang) + * + * int unused __rte_unused; + * unused = foo(); // does the trick with all compilers + * } + * @endcode + */ +#define __rte_warn_unused_result __attribute__((warn_unused_result)) + /** * Force a function to be inlined */ -- 2.25.1