diff mbox series

[1/2] Add QEMU_WARN_UNUSED_RESULT attribute

Message ID 84781fce2c3145a86d043d4c6b3b463af40eeed0.1699606819.git.manos.pitsidianakis@linaro.org
State New
Headers show
Series Add QEMU_WARN_UNUSED_RESULT function attribute | expand

Commit Message

Manos Pitsidianakis Nov. 10, 2023, 9:16 a.m. UTC
This commit adds QEMU_WARN_UNUSED_RESULT, a macro for the gcc function
attribute `warn_unused_result`. The utility of this attribute is to
ensure functions that return values that need to be inspected are not
ignored by the caller.

Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
---
 include/qemu/compiler.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

Daniel P. Berrangé Nov. 10, 2023, 9:24 a.m. UTC | #1
On Fri, Nov 10, 2023 at 11:16:38AM +0200, Manos Pitsidianakis wrote:
> This commit adds QEMU_WARN_UNUSED_RESULT, a macro for the gcc function
> attribute `warn_unused_result`. The utility of this attribute is to
> ensure functions that return values that need to be inspected are not
> ignored by the caller.
> 
> Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> ---
>  include/qemu/compiler.h | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index c797f0d457..7ddbf1f1cf 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -212,6 +212,20 @@
>  # define QEMU_USED
>  #endif
>  
> +/*
> + * From GCC documentation:
> + *
> + *   The warn_unused_result attribute causes a warning to be emitted if a
> + *   caller of the function with this attribute does not use its return value.
> + *   This is useful for functions where not checking the result is either a
> + *   security problem or always a bug, such as realloc.
> + */
> +#if __has_attribute(warn_unused_result)
> +# define QEMU_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
> +#else
> +# define QEMU_WARN_UNUSED_RESULT
> +#endif

GLib already provides us G_GNUC_WARN_UNUSED_RESULT so don't add this.

With regards,
Daniel
Philippe Mathieu-Daudé Nov. 10, 2023, 11:15 a.m. UTC | #2
On 10/11/23 10:16, Manos Pitsidianakis wrote:
> This commit adds QEMU_WARN_UNUSED_RESULT, a macro for the gcc function
> attribute `warn_unused_result`. The utility of this attribute is to
> ensure functions that return values that need to be inspected are not
> ignored by the caller.
> 
> Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> ---
>   include/qemu/compiler.h | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)

> +/*
> + * From GCC documentation:
> + *
> + *   The warn_unused_result attribute causes a warning to be emitted if a
> + *   caller of the function with this attribute does not use its return value.
> + *   This is useful for functions where not checking the result is either a
> + *   security problem or always a bug, such as realloc.
> + */
> +#if __has_attribute(warn_unused_result)
> +# define QEMU_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
> +#else
> +# define QEMU_WARN_UNUSED_RESULT
> +#endif

FWIW I sometimes use:

+#if __has_attribute(nonnull)
+# define QEMU_NONNULL(indexes...) __attribute__((nonnull((indexes))))
+#else
+# define QEMU_NONNULL(indexes...)
+#endif

when doing tree-wide refactors, then remove the attribute because
prototypes become really ugly.
diff mbox series

Patch

diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index c797f0d457..7ddbf1f1cf 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -212,6 +212,20 @@ 
 # define QEMU_USED
 #endif
 
+/*
+ * From GCC documentation:
+ *
+ *   The warn_unused_result attribute causes a warning to be emitted if a
+ *   caller of the function with this attribute does not use its return value.
+ *   This is useful for functions where not checking the result is either a
+ *   security problem or always a bug, such as realloc.
+ */
+#if __has_attribute(warn_unused_result)
+# define QEMU_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+#else
+# define QEMU_WARN_UNUSED_RESULT
+#endif
+
 /*
  * Ugly CPP trick that is like "defined FOO", but also works in C
  * code.  Useful to replace #ifdef with "if" statements; assumes