https://gcc.gnu.org/g:9cf6b52d04df22726d88eef113211b3cc08515de

commit r15-9499-g9cf6b52d04df22726d88eef113211b3cc08515de
Author: Iain Sandoe <iainsandoe@mini-05-seq.local>
Date:   Sun Dec 29 23:06:54 2024 +0000

    includes, Darwin: Handle modular use for macOS SDKs [PR116827].
    
    Recent changes to the OS SDKs have altered the way in which include guards
    are used for a number of headers when C++ modules are enabled.  Instead of
    placing the guards in the included header, they are being placed in the
    including header.  This breaks the assumptions in the current GCC stddef.h
    specifically, that the presence of __PTRDIFF_T and __SIZE_T means that the
    relevant defs are already made.  However in the case of the module-enabled
    C++ with these SDKs, that is no longer true.
    
    stddef.h has a large body of special-cases already, but it seems that the
    only viable solution here is to add a new one specifically for __APPLE__
    and modular code.
    
    This fixes around 280 new fails in the modules test-suite; it is needed on
    all open branches that support modules.
    
            PR target/116827
    
    gcc/ChangeLog:
    
            * ginclude/stddef.h: Undefine __PTRDIFF_T and __SIZE_T for module-
            enabled c++ on Darwin/macOS platforms.
    
    Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>

Diff:
---
 gcc/ginclude/stddef.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
index 0d53103ce20c..bacf24d2425c 100644
--- a/gcc/ginclude/stddef.h
+++ b/gcc/ginclude/stddef.h
@@ -89,6 +89,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If 
not, see
 #undef _PTRDIFF_T_
 #endif
 
+/* When modular code is enabled with macOS SDKs from version 15, the
+   include guards are set in the includers of this code, rather than as
+   part of it.  This means the we must unset them or the intended code
+   here will be bypassed (resulting in undefined values).  */
+#if defined (__APPLE__)
+# if defined(__has_feature) && __has_feature(modules)
+#  if defined (__need_ptrdiff_t)
+#   undef __PTRDIFF_T
+#  endif
+#  if defined (__need_size_t)
+#   undef __SIZE_T
+#  endif
+# endif
+#endif
+
 /* On VxWorks, <type/vxTypesBase.h> may have defined macros like
    _TYPE_size_t which will typedef size_t.  fixincludes patched the
    vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is

Reply via email to