Isn't this an OS issue rather than a general port issue. Seems to me it will depend on the system header files. With a few notable exceptions I'm not sure the port maintainers can answer this for all their target OSs.
R. On 21/03/18 12:15, Nathan Sidwell wrote: > Port maintainers CC'd, apologies if I've missed you. > > NO_IMPLICIT_EXTERN_C is a target machine define that turns off wrapping > system header files in 'extern "C" { ... }'. It is the remaining > non-deprecated ARM-era compatibility behaviour. Can we deprecated it? > > Unfortunately it's a negative-sense define, that now at least most ports > define. Do all ports define it? It's hard to determine that, because > many ports get it set via config/gnu-user.h or similar common file. > > It also has the following undocumented features (when not set): > 1) in a system header in an extern "C" region, a prototype of the form > 'T func ()' means unspecified parms. We treat it as (...), but that's > not valid C and probably will do the wrong thing with today's more > complex ABIs. > > 2) Again, in a system header for extern "C" fns, enables matching > between function prototypes via self-promoting parameter types. I.e. > 'extern "C" T foo (char)' and 'extern "C" T foo (int)' are the same fn. > > The path by which the extern "C" wrapping happens is tortuous though > c-family/c-lex.c via a global variable and the parser setting flags on > each token. Ugh! > > I think the way of going about that would be to require it to be defined > to either 0 or 1, and test that, rather than its definedness. Then any > ports that require the old behaviour will need to set it to zero, > explicitly indicating the requirement. Something like: > > // in default.h > #if !defined (NO_IMPLICIT_EXTERN_C) \ > || (0 - NO_IMPLICIT_EXTERN_C - 1) > 0 /* Detect blank */ > #error NO_IMPLICIT_EXTERN_C must be defined to 0 or 1, see XXX > #endif > > modify the existing #defines to provide a value. > > modify the uses from > #ifndef NO_IMPLICIT_EXTERN_C > into > #if !NO_IMPLICIT_EXTERN_C > > (That's just as vulnerable to misspellings of the name as the ifndef > case, and we're converting existing code, so probably quite safe.) > > My suspicion is that pdp11 and/or vax may care? > > Comments/Objections? > > nathan > -- > Nathan Sidwell