<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>