https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97991
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot gnu.org --- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Even simplified testcase: ``` #pragma message _Pragma ("pack(bar)") ``` That is it happens with pack (on some targets), redefine_extname and message pragma which does expansion inside the pragma That is: c-family/c-pragma.cc: c_register_pragma_with_expansion (0, "pack", handle_pragma_pack); c-family/c-pragma.cc: c_register_pragma_with_expansion (0, "redefine_extname", c-family/c-pragma.cc: c_register_pragma_with_expansion (0, "message", handle_pragma_message); config/sol2-c.cc: c_register_pragma_with_expansion (0, "align", solaris_pragma_align); config/vms/vms-c.cc: c_register_pragma_with_expansion (NULL, "__nomember_alignment", config/vms/vms-c.cc: c_register_pragma_with_expansion (NULL, "nomember_alignment", The assert was added with r0-72806-gbc4071dd66fd4d (which I think caused it). I think I have a simple fix. the assert should just be changed to allow CPP_PRAGMA when inside a in_pragma (which is like what the C++ front-end does). Note the preprocessed source is wrong too but it is wrong for C++ already. I will try to fix that tomorrow.