On Sun, 15 Sep 2024, Pali Rohár wrote:
When compiling any application with flags under gcc 7+ with flags
-D__MINGW_INTRIN_INLINE -Wall -Wextra, it throws about 300 lines of
preprocessor warnings for __INTRINSIC_PROLOG usage:
warning: this use of "defined" may not be portable
This isn't actually true for most installs of mingw-w64, so we probably
should change this message somewhat.
---
If the mingw-w64 headers are included in a way that doesn't mute warnings
in system headers, this header causes lots of warnings like:
warning: this use of "defined" may not be portable
---
That makes the scope of the patch clear.
It is caused by the fact that this macro __INTRINSIC_PROLOG uses
non-portable Conditional inclusion (ISO WG14 N2176 (C17) 6.10.1/4).
Disable this gcc warning via localized GCC pragmas to prevent 300 lines of
warnings for every application.
---
mingw-w64-headers/include/psdk_inc/intrin-impl.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/mingw-w64-headers/include/psdk_inc/intrin-impl.h
b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
index b30e0404ba88..06bbbfe4f7df 100644
--- a/mingw-w64-headers/include/psdk_inc/intrin-impl.h
+++ b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
@@ -67,6 +67,16 @@ __INTRINSICS_USEINLINE
#define __has_builtin(x) 0
#endif
+/*
+ * Macro __INTRINSIC_PROLOG uses non-portable Conditional inclusion
+ * (ISO WG14 N2176 (C17) 6.10.1/4). Avoid gcc 7+ -Wexpansion-to-defined
+ * warning enabled by -W or -Wextra option.
+ */
+#if defined(__GNUC__) && __GNUC__ >= 7
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wexpansion-to-defined"
+#endif
FWIW, Clang also has got this warning, but Clang presents itself as GCC
4.2 in these defines, so we could do something like this:
#if defined(__GNUC__) && (__GNUC__ >= 7 || defined(__clang__))
If we don't care about exactly when Clang has learnt about this warning -
I think it has been supported longer than we care about here. A quick dig
in the code seems that it was renamed in Clang 3.9 in
https://github.com/llvm/llvm-project/commit/b5d539380a9b548f28ffa067067f90d3139ca767.
So that's more than long enough.
Curiously, this warning isn't enabled in Clang with -Wall -Wextra, but it
is enabled by -pedantic.
So I guess we could amend these #ifs to include this condition.
// Martin
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public