http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49992
--- Comment #6 from Iain Sandoe <iains at gcc dot gnu.org> 2011-08-08 17:57:06 UTC --- Created attachment 24951 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24951 make errors.c match core-diagnostic.c in the shared interfaces OK. So Darwin's ld is telling the truth - the routine does exist in both errors.o and the libcommon.a. I guess, the issue is that (a) the implementations are subtly different, and (b) there could be causes that would get core-diagnostic.o and errors.o both included (e.g. a reference to fatal_error). I'm testing out the attached patch on i686-linux, x86-64-linux and *-darwin{9,10}. What is _not_ obvious to me is why x86_64-darwin{10,11} is bitten by this, but *-darwin9 and linux are not. === the patch makes the errors.c interface match the core-diagnostic.c ones (and more rigorously checks that the relevant headers are included on GENERATOR_FILE). of course, I'm not terribly familiar with the generator programs - there could be some excellent reason that errors.c:fatal () is declared differently from core-diagnostics.c:fatal_error ().