I guess this is better now. Changelog (gcc/c-family): 2011-06-10 Pierre Vittet * c-pragma.h (pragma_handler_1arg, pragma_handler_2arg): New handler. (gen_pragma_handler): New union. (internal_pragma_handler): New type. (c_register_pragma_with_data, c_register_pragma_with_expansion_and_data): New functions. * c-pragma.c (registered_pragmas, c_register_pragma_1, c_register_pragma, c_register_pragma_with_expansion, c_invoke_pragma_handler): Changed to work with internal_pragma_handler. (c_register_pragma_with_data, c_register_pragma_with_expansion_and_data): New functions. Changelog (gcc/testsuite): 2011-06-10 Pierre Vittet * g++.dg/plugin/pragma_plugin_with_data.c: New test file. * g++.dg/plugin/pragma_plugin_with_data-test-1.C: New test file. * g++.dg/plugin/plugin.exp (plugin_test_list): Add the new test