From 2501c274f5808f8905f15ce2a4bbec759ec43a97 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Fri, 23 Jan 2026 13:15:46 +0100 Subject: [PATCH] [winpr,platform] add WINPR_ATTR_NODISCARD macro * add macro WINPR_ATTR_NODISCARD * adjust C-23 checks for macros according to https://en.cppreference.com/w/c/language/attributes.html --- winpr/include/winpr/platform.h | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/winpr/include/winpr/platform.h b/winpr/include/winpr/platform.h index 7a555bef4..a8ccb640f 100644 --- a/winpr/include/winpr/platform.h +++ b/winpr/include/winpr/platform.h @@ -59,7 +59,7 @@ #endif // C23 related macros -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202311L) +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201904L) #define WINPR_FALLTHROUGH \ (void)0; \ [[fallthrough]]; @@ -75,6 +75,17 @@ #define WINPR_FALLTHROUGH (void)0; #endif +// C23 related macros +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202003L) +#define WINPR_ATTR_NODISCARD [[nodiscard]] +#elif defined(__clang__) +#define WINPR_ATTR_NODISCARD __attribute__((warn_unused_result)) +#elif defined(__GNUC__) && (__GNUC__ >= 7) +#define WINPR_ATTR_NODISCARD __attribute__((warn_unused_result)) +#else +#define WINPR_ATTR_NODISCARD +#endif + #if defined(__clang__) #define WINPR_PRAGMA_DIAG_PUSH WINPR_DO_PRAGMA(clang diagnostic push) #define WINPR_PRAGMA_DIAG_IGNORED_OVERLENGTH_STRINGS \ @@ -514,21 +525,26 @@ WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO WINPR_PRAGMA_DIAG_POP -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202311L) +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201904L) #define WINPR_DEPRECATED(obj) [[deprecated]] obj #define WINPR_DEPRECATED_VAR(text, obj) [[deprecated("[deprecated] " text)]] obj +#elif defined(__GNUC__) +#define WINPR_DEPRECATED(obj) obj __attribute__((deprecated)) +#define WINPR_DEPRECATED_VAR(text, obj) obj __attribute__((deprecated("[deprecated] " text))) +#else +#define WINPR_DEPRECATED(obj) obj +#define WINPR_DEPRECATED_VAR(text, obj) obj +#endif + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202202L) #define WINPR_NORETURN(obj) [[noreturn]] obj #elif defined(WIN32) && !defined(__CYGWIN__) #define WINPR_DEPRECATED(obj) __declspec(deprecated) obj #define WINPR_DEPRECATED_VAR(text, obj) __declspec(deprecated("[deprecated] " text)) obj #define WINPR_NORETURN(obj) __declspec(noreturn) obj #elif defined(__GNUC__) -#define WINPR_DEPRECATED(obj) obj __attribute__((deprecated)) -#define WINPR_DEPRECATED_VAR(text, obj) obj __attribute__((deprecated("[deprecated] " text))) #define WINPR_NORETURN(obj) __attribute__((__noreturn__)) obj #else -#define WINPR_DEPRECATED(obj) obj -#define WINPR_DEPRECATED_VAR(text, obj) obj #define WINPR_NORETURN(obj) obj #endif