From: Olatunji Ruwase Date: Mon, 20 Jul 2009 19:28:05 +0000 (+0000) Subject: toplev.c: Invoke FINISH_UNIT callbacks before call to finalize(). X-Git-Tag: releases/gcc-4.5.0~4480 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c8e65c30f22cfa6556f9431c35ec326a8088854;p=thirdparty%2Fgcc.git toplev.c: Invoke FINISH_UNIT callbacks before call to finalize(). ./: * toplev.c: Invoke FINISH_UNIT callbacks before call to finalize(). testsuite/: * gcc.dg/plugin/finish_unit_plugin.c: New test. * gcc.dg/plugin/finish_unit-test-1.c: New test. * gcc.dg/plugin/plugin.exp: Added finish_unit_plugin.c test. From-SVN: r149833 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 532c9257ac5e..43ea2b7a04ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-07-20 Olatunji Ruwase + + * toplev.c: Invoke FINISH_UNIT callbacks before call to + finalize(). + 2009-07-20 Shujing Zhao * Makefile.in (TREE_INLINE_H, tree-inline.o, cgraph.o): Remove diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b7ba7d4f9747..5faeb99bf237 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-07-20 Olatunji Ruwase + + * gcc.dg/plugin/finish_unit_plugin.c: New test. + * gcc.dg/plugin/finish_unit-test-1.c: New test. + * gcc.dg/plugin/plugin.exp: Added finish_unit_plugin.c test. + 2009-07-20 Adam Nemet * gcc.target/mips/ext-3.c: New test. diff --git a/gcc/testsuite/gcc.dg/plugin/finish_unit-test-1.c b/gcc/testsuite/gcc.dg/plugin/finish_unit-test-1.c new file mode 100644 index 000000000000..4cd8a40f4415 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/finish_unit-test-1.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +int main (int argc, char **argv) +{ + return 0; +} diff --git a/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c b/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c new file mode 100644 index 000000000000..634daeeda135 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c @@ -0,0 +1,28 @@ +/* This plugin creates a fake function in the FINISH_UNIT callback, in + * other words right after compilation of the translation unit. +*/ +#include "gcc-plugin.h" +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "toplev.h" +#include "basic-block.h" +#include "gimple.h" +#include "tree.h" +#include "tree-pass.h" +#include "intl.h" + +int plugin_is_GPL_compatible; + +static void finish_unit_callback (void *gcc_data, void *user_data) +{ + cgraph_build_static_cdtor ('I', NULL, DEFAULT_INIT_PRIORITY); +} + +int plugin_init (struct plugin_name_args *plugin_info, + struct plugin_gcc_version *version) +{ + register_callback ("finish_unit", PLUGIN_FINISH_UNIT, &finish_unit_callback, NULL); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp b/gcc/testsuite/gcc.dg/plugin/plugin.exp index 3122fa8dc3ef..872a0ea8c3c4 100644 --- a/gcc/testsuite/gcc.dg/plugin/plugin.exp +++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp @@ -51,6 +51,7 @@ set plugin_test_list [list \ { ggcplug.c ggcplug-test-1.c } \ { one_time_plugin.c one_time-test-1.c } \ { start_unit_plugin.c start_unit-test-1.c } \ + { finish_unit_plugin.c finish_unit-test-1.c } \ ] foreach plugin_test $plugin_test_list { diff --git a/gcc/toplev.c b/gcc/toplev.c index 6fa3f1a44ec7..81d55f3a5b83 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1091,6 +1091,9 @@ compile_file (void) } #endif + /* Invoke registered plugin callbacks. */ + invoke_plugin_callbacks (PLUGIN_FINISH_UNIT, NULL); + /* This must be at the end. Some target ports emit end of file directives into the assembly file here, and hence we can not output anything to the assembly file after this point. */ @@ -2348,9 +2351,6 @@ do_compile (void) compile_file (); finalize (); - - /* Invoke registered plugin callbacks. */ - invoke_plugin_callbacks (PLUGIN_FINISH_UNIT, NULL); } /* Stop timing and print the times. */