I have written a test for this patch and run it (it works correctly). I guess there is no reason why it should not be accepted now. To recap, this patch add a void * data field to the pragma handler, allowing to pass extra data. If we want to use this field, we need to use the function c_register_pragma_with_data or c_register_pragma_with_expansion_and_data. The old c_register_pragma(_with_expansion) is kept compatible. I give two diff and two ChangeLog, the first are for the patch itself, the second are for the test. I have tried to make things as good as possible, if there is a remark, please, send me it. Especially, I am not sure about the format of my ChangeLog, if there is an issue, I am ready to change it. Changelog gcc: 2011-06-08 Pierre Vittet * c-pragma.h (pragma_handler_1arg, pragma_handler_2arg, gen_pragma_handler, internal_pragma_handler, c_register_pragma, c_register_pragma_with_data, c_register_pragma_with_expansion, c_register_pragma_with_expansion_and_data): allows to add data to a pragma handler using a new c_register. Old c_register keep old behaviour for compatibility. * c-pragma.c (registered_pragmas, c_register_pragma_1, c_register_pragma, c_register_pragma_with_data, c_register_pragma_with_expansion, c_register_pragma_with_expansion_and_data, c_invoke_pragma_handler, init_pragma): allows to add data to a pragma handler using a new c_register. Old registers keep old behaviour for compatibility. Changelog testsuite 2011-06-08 Pierre Vittet * g++.dg/plugin/pragma_plugin_with_data.c: New test. Thanks! Pierre Vittet