]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
tuklib_physmem: Silence warning from -Wcast-function-type on MinGW-w64.
authorJia Tan <jiat0218@gmail.com>
Thu, 19 Jan 2023 12:35:09 +0000 (20:35 +0800)
committerLasse Collin <lasse.collin@tukaani.org>
Sat, 11 Mar 2023 19:45:26 +0000 (21:45 +0200)
tuklib_physmem depends on GetProcAddress() for both MSVC and MinGW-w64
to retrieve a function address. The proper way to do this is to cast the
return value to the type of function pointer retrieved. Unfortunately,
this causes a cast-function-type warning, so the best solution is to
simply ignore the warning.

src/common/tuklib_physmem.c

index a1bccb2f67530bf1d28655515996df493971e25d..69f6fd4c8663a0b989c82615dbe1d08088d8b441 100644 (file)
 #endif
 
 
+// With GCC >= 8.1 with -Wextra and Clang >= 13 with -Wcast-function-type
+// will warn about the Windows-specific code.
+#if defined(__has_warning)
+#      if __has_warning("-Wcast-function-type")
+#              define CAN_DISABLE_WCAST_FUNCTION_TYPE 1
+#      endif
+#elif TUKLIB_GNUC_REQ(8,1)
+#      define CAN_DISABLE_WCAST_FUNCTION_TYPE 1
+#endif
+
+
 extern uint64_t
 tuklib_physmem(void)
 {
@@ -87,8 +98,15 @@ tuklib_physmem(void)
                HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll"));
                if (kernel32 != NULL) {
                        typedef BOOL (WINAPI *gmse_type)(LPMEMORYSTATUSEX);
+#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");
+#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE
+#      pragma GCC diagnostic pop
+#endif
                        if (gmse != NULL) {
                                MEMORYSTATUSEX meminfo;
                                meminfo.dwLength = sizeof(meminfo);