Hi, TL;DR So, it turns out that there’s an interaction between standards wording that makes an implementation conforming when it has extensions that, when used, make a program ill-formed (but with no diagnostic required) (see the PR for more detail).
One might argue that using such extensions is asking for portability issues (the case here), but it’s not prohibited. The following patch applies a fixincludes to work around it for now, I’ve tested it DTRT for me and posted to the PR for other folks to confirm it works for them. OK for trunk (after wider testing)? branches? Iain fixincludes/ xxxx-xx-xx Erik Schnetter <schnet...@gmail.com> Jakub Jelinek <ja...@redhat.com> Iain Sandoe <i...@sandoe.co.uk> PR bootstrap/89864 * inclhack.def (darwin_ucred__Atomic): New, work around _Atomic keyword use in headers included by C++. * fixincl.x: Regenerated. diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 8fd9f7e..d8ce89a 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -1622,6 +1622,25 @@ fix = { "#define UINTMAX_C(v) (v ## ULL)"; }; +/* The SDK included with XCode 10.2 has the file <sys/ucred.h> that uses the + C11 _Atomic keyword (exposing it to C++ code). The work-around here follows + the header in declaring the entity volatile when _Atomic is not available. +*/ +fix = { + hackname = darwin_ucred__Atomic; + mach = "*-*-darwin*"; + files = sys/ucred.h; + select = "_Atomic"; + c_fix = wrap; + c_fix_arg = "#if (__STDC_VERSION__ < 201112L) || defined(__cplusplus)\n" + "# define _Atomic volatile\n" + "#endif\n"; + c_fix_arg = "#if (__STDC_VERSION__ < 201112L) || defined(__cplusplus)\n" + "# undef _Atomic\n" + "#endif\n"; + test_text = "_Atomic"; +}; + /* * Fix <c_asm.h> on Digital UNIX V4.0: * It contains a prototype for a DEC C internal asm() function,