diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2023-01-23 23:38:34 +0200 |
---|---|---|
committer | Jia Tan <jiat0218@gmail.com> | 2023-01-24 20:20:40 +0800 |
commit | 8366cf8738e8b7bb74c967d07bf0fd2a1878e575 (patch) | |
tree | 26fa61ba9a0a350544e3358431288eb9a4feb3c5 /src | |
parent | xz: Flip the return value of suffix_is_set to match the documentation. (diff) | |
download | xz-8366cf8738e8b7bb74c967d07bf0fd2a1878e575.tar.xz |
tuklib_physmem: Clean up the way -Wcast-function-type is silenced on Windows.
__has_warning and other __has_foo macros are meant to become
compiler-agnostic so it's not good to check for __clang__ with it.
This also relied on tuklib_common.h for #defining __has_warning
which was confusing as #defining reserved macros is generally
not a good idea.
Diffstat (limited to 'src')
-rw-r--r-- | src/common/tuklib_physmem.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/common/tuklib_physmem.c b/src/common/tuklib_physmem.c index 73d37c29..14a66c03 100644 --- a/src/common/tuklib_physmem.c +++ b/src/common/tuklib_physmem.c @@ -73,6 +73,17 @@ #endif +// With GCC >= 8.1 with -Wextra and Clang >= 13 with -Wcast-function-type +// will warn about the Windows-specific code. +#if TUKLIB_GNUC_REQ(8,1) +# define CAN_DISABLE_WCAST_FUNCTION_TYPE 1 +#elif defined(__has_warning) +# if __has_warning("-Wcast-function-type") +# define CAN_DISABLE_WCAST_FUNCTION_TYPE 1 +# endif +#endif + + extern uint64_t tuklib_physmem(void) { @@ -87,15 +98,13 @@ tuklib_physmem(void) HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll")); if (kernel32 != NULL) { typedef BOOL (WINAPI *gmse_type)(LPMEMORYSTATUSEX); -#if TUKLIB_GNUC_REQ(8,1) || (defined(__clang__) \ - && __has_warning("-Wcast-function-type")) +#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wcast-function-type" #endif gmse_type gmse = (gmse_type)GetProcAddress( kernel32, "GlobalMemoryStatusEx"); -#if TUKLIB_GNUC_REQ(8,1) || (defined(__clang__) \ - && __has_warning("-Wcast-function-type")) +#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE # pragma GCC diagnostic pop #endif if (gmse != NULL) { |