Hello- As discussed here: https://gcc.gnu.org/pipermail/gcc-patches/2022-July/598136.html Here is another short patch that improves "#pragma GCC diagnostic" handling. Longer term, it will be desirable to make the handling of this pragma independent of the global input_location. But in the meantime, some glitches like this one can be readily addressed by making input_location point to something better. In this case, input_location during preprocessing (-E or -save-temps) is made to point to the most recently seen token rather than the beginning of the file. To the best of my knowledge, nothing else besides "#pragma GCC diagnostic" handling can observe input_location during token streaming, so this is expected not to have any other repercussions. Bootstrap + regtest does look clean on x86-64 Linux. By the way, the new testcase fails when compiled with C++, but it's not because of pragma handling, it's rather because the C++ frontend changes the location on the warning to the wrong place. Once done_lexing has been set to true, it changes the location of all warnings to input_location, however that's not correct when the location is the cached location of a macro definition; the original location is preferable. I will file a separate PR about that, and have xfailed that testcase for now, since I am not quite there with grokking the reason it behaves this way, and anyway it's not related to this 1-line fix for gcc -E. Please let me know how it looks? Thanks! -Lewis