Fix -fopt-info for plugin passes
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 4 Oct 2018 14:33:47 +0000 (14:33 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Thu, 4 Oct 2018 14:33:47 +0000 (14:33 +0000)
commit5d98e5a6bc715cc865b9110ff0255572ac22570d
tree7f7ee75a6d43b65b14261ebf6740d5d18c39f684
parentc19bc1a0832c01c0162aaba829b24609f60bba91
Fix -fopt-info for plugin passes

Attempts to dump via -fopt-info from a plugin pass fail, due
to the dfi->alt_state for such passes never being set.

This is because the -fopt-info options were being set up per-pass
during option-parsing (via gcc::dump_manager::opt_info_enable_passes),
but this data was not retained or used it for passes created later
(for plugins and target-specific passes).

This patch fixes the issue by storing the -fopt-info options into
gcc::dump_manager, refactoring the dfi-setup code out of
opt_info_enable_passes, and reusing it for such passes, fixing the
issue.  The patch adds a demo plugin to test that dumping from a
plugin works.

gcc/ChangeLog:
* dumpfile.c (gcc::dump_manager::dump_manager): Initialize new
fields.
(gcc::dump_manager::~dump_manager): Free m_optinfo_filename.
(gcc::dump_manager::register_pass): New member function, adapted
from loop body in gcc::pass_manager::register_pass, adding a
call to update_dfi_for_opt_info.
(gcc::dump_manager::opt_info_enable_passes): Store the
-fopt-info options into the new fields.  Move the loop
bodies into...
(gcc::dump_manager::update_dfi_for_opt_info): ...this new member
function.
* dumpfile.h (struct opt_pass): New forward decl.
(gcc::dump_manager::register_pass): New decl.
(gcc::dump_manager::update_dfi_for_opt_info): New decl.
(class gcc::dump_manager): Add fields "m_optgroup_flags",
"m_optinfo_flags", and "m_optinfo_filename".
* passes.c (gcc::pass_manager::register_pass): Move all of the
dump-handling code to gcc::dump_manager::register_pass.

gcc/testsuite/ChangeLog:
* gcc.dg/plugin/dump-1.c: New test.
* gcc.dg/plugin/dump_plugin.c: New test plugin.
* gcc.dg/plugin/plugin.exp (plugin_test_list): Add the above.

From-SVN: r264844
gcc/ChangeLog
gcc/dumpfile.c
gcc/dumpfile.h
gcc/passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/plugin/dump-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/dump_plugin.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/plugin.exp