aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2023-01-23 23:38:34 +0200
committerJia Tan <jiat0218@gmail.com>2023-01-24 20:20:40 +0800
commit8366cf8738e8b7bb74c967d07bf0fd2a1878e575 (patch)
tree26fa61ba9a0a350544e3358431288eb9a4feb3c5 /src
parentxz: Flip the return value of suffix_is_set to match the documentation. (diff)
downloadxz-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.c17
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) {