https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69126
--- Comment #10 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Hence I *think* the issue here is that the locations of the tokens within libcpp/directives.c:destringize_and_run don't respect macro expansions, leading to the strange location for the ignore directive that is slightly after the relevant macro expansion. However, that function is full of comments like /* Ugh; an awful kludge. We are really not set up to be lexing and: /* ??? Antique Disgusting Hack. What does this do? */ and the like, so am not sure I want to touch it... Perhaps this could be papered over by reverting r226234, but that would regress the removal of %q+D mentioned in comment #7, and there are presumably other ways to combine _Pragma and macros that would show up issues this way (though these behaviors are presumably already present in earlier gcc releases).