<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.
</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/7de4cebea66720b1930912bf46d2444116b021b1">https://github.com/macports/macports-legacy-support/commit/7de4cebea66720b1930912bf46d2444116b021b1</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7de4cebea66720b1930912bf46d2444116b021b1
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Mon Dec 2 18:25:19 2024 -0800
<span style='display:block; white-space:pre;color:#404040;'> sys/cdefs: Narrow scope of __has_cpp_attribute fix.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> The workaround for the bug in __has_cpp_attribute() is acceptable for
</span><span style='display:block; white-space:pre;color:#404040;'> all versions of both clang and GCC, but causes unsuppressible warnings
</span><span style='display:block; white-space:pre;color:#404040;'> in affected versions of GCC. To minimize this, we narrow the scope of
</span><span style='display:block; white-space:pre;color:#404040;'> the workaround in the GCC case to just the cases that actually require
</span><span style='display:block; white-space:pre;color:#404040;'> it.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'> Eliminates warnings where possible.
</span><span style='display:block; white-space:pre;color:#404040;'> Tests pass on all platforms.
</span>---
include/sys/cdefs.h | 30 +++++++++++++++++++++---------
1 file changed, 21 insertions(+), 9 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 7f3c8fa..c786418 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,9 +44,17 @@
</span> * The first case where this arose was in using the 15.x SDK with the
* Xcode 7.2 clang 7 compiler on OS 10.10.
*
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * A similar bug exists in some versions of gcc, and a similar workaround
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * is applicable, except that suppressing the resulting warning doesn't
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * seem to work, for an unknown reason.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * A similar bug exists in gcc5+, and remained until gcc12, where it was
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * fixed by tolerating the namespaced argument even in C mode, rather than
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * removing __has_cpp_attribute(). The clang workaround is still applicable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in principle, but the option to disable the redefinition warning doesn't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * work in GCC, apparently because it only applies to redefinitions of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * certain specific macros (not including __has_cpp_attribute).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Because the warning is unavoidable in GCC, we only apply the workaround
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in cases where it's actually necessary, which means GCC < 12 and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * SDK >= 15. This is the only case where we care about the SDK version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in this header, so the include of sdkversion.h is limited to this case.
</span> *
* Note that the case where __has_cpp_attribute is undefined is already
* handled by the Apple include, so only the inappropriately defined case
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,12 +67,16 @@
</span> #pragma clang diagnostic ignored "-Wbuiltin-macro-redefined"
#define __has_cpp_attribute(x) 0
#pragma clang diagnostic pop
<span style='display:block; white-space:pre;background:#ffe0e0;'>- #elif defined(__GNUC__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #pragma GCC diagnostic push
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* The following doesn't seem to work */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #pragma GCC diagnostic ignored "-Wbuiltin-macro-redefined"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define __has_cpp_attribute(x) 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #pragma GCC diagnostic pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(__GNUC__) && __GNUC__ < 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Get the SDK version to see if we need the workaround. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <_macports_extras/sdkversion.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if __MPLS_SDK_MAJOR >= 150000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma GCC diagnostic push
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* The following warning disable doesn't actually work. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma GCC diagnostic ignored "-Wbuiltin-macro-redefined"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define __has_cpp_attribute(x) 0 /* Probably unavoidable warning here */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma GCC diagnostic pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span> #endif
#endif
</pre><pre style='margin:0'>
</pre>