https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97620
--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> --- I don't know of any such macros and -dM -E doesn't show any. Bug 82700 comment 1 explains that "The sprintf pass calls lang_hooks.to_target_charset () to convert each of these characters from the source set to the execution set and the function aborts when it can't do the conversion. That seems unfriendly -- it should instead return some failure code and let the caller decide how to deal with it." The caller could deal with it by issuing a more friendly message. But the ICE happens inside the preprocessor library and there's no API to find out if a charset is valid. It also doesn't seem that handling the failure and issuing an error should be left up to each client of the library. It would probably be best to handle during option validation.