https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38573
--- Comment #13 from Frederic Marchal <fmarchal at perso dot be> --- (In reply to Roland Illig from comment #12) > (In reply to Frederic Marchal from comment #11) > > I suspect a misunderstanding here. Forgive me if I state the obvious. > > > > The fix is not to move the translation mark around. > > I think moving the translation mark "_(...)" into each case of the switch > statement would solve the problem, so maybe I misunderstood you here. Ah yes, I see your point. The string literal may be translated with _() when it is assigned to symstd_msg. It doesn't have to be translated later when symstd_msg is assigned to symstd. So moving _() is fine: symstd_msg = _("available since Fortran 77"); if (symstd) *symstd = symstd_msg; Sorry, the misunderstanding was on my side. I was stuck with this pattern: symstd_msg = N_("available since Fortran 77"); if (symstd) *symstd = _(symstd_msg);