https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109704
Bug ID: 109704 Summary: #pragma {push,pop}_macro broken for identifiers that contain dollar signs at nonfirst positions Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: preprocessor Assignee: unassigned at gcc dot gnu.org Reporter: pskocik at gmail dot com Target Milestone: --- This following dollarsign-less example compiles fine as expected: #define MACRO 1 _Static_assert(MACRO,""); #pragma push_macro("MACRO") #undef MACRO #define MACRO 0 _Static_assert(!MACRO,""); #pragma pop_macro("MACRO") _Static_assert(MACRO,""); //OK Substituting $MACRO for MACRO still works, but with MACRO$ or M$CRO the final assertions fail: https://godbolt.org/z/n1EoGao74