http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54928
--- Comment #8 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2012-10-16 18:05:52 UTC --- Created attachment 28457 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28457 better fix The code is re-using the diagnostic passed as an argument to produce new diagnostics, and by saving/reloading values on it. But we actually only need to modify things once, and if we use a new diagnostic struct, we don't need to touch the original. Of course, we should still not print the caret and macro expansion in internal_error, but that is a bit more complicated.