https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119438
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This should not be too hard to add, current code does: ``` /* Check the stringifying # constraint 6.10.3.2.1 of function-like macros when lexing the subsequent token. */ if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like) { if (token->type == CPP_MACRO_ARG || (macro->variadic && token->type == CPP_NAME && token->val.node.node == pfile->spec_nodes.n__VA_OPT__)) { if (token->flags & PREV_WHITE) token->flags |= SP_PREV_WHITE; if (token[-1].flags & DIGRAPH) token->flags |= SP_DIGRAPH; token->flags &= ~PREV_WHITE; token->flags |= STRINGIFY_ARG; token->flags |= token[-1].flags & PREV_WHITE; token[-1] = token[0]; macro->count--; } /* Let assembler get away with murder. */ else if (CPP_OPTION (pfile, lang) != CLK_ASM) { cpp_error (pfile, CPP_DL_ERROR, "%<#%> is not followed by a macro parameter"); goto out; } } ``` Basically we need to give out a better error message here. As far as the location, token[-1].src_loc contains the location of the #. So `s/cpp_error (pfile, CPP_DL_ERROR,/cpp_error_at (pfile, CPP_DL_ERROR, token[-1].src_loc,/` should work better. Maybe even just `0` instead of `-1` to point to the token following `#`. This whole function (create_iso_definition) needs the cpp_error_at treatment I think too.