aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlatunji Ruwase <tjruwase@google.com>2009-07-20 19:28:05 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2009-07-20 19:28:05 +0000
commit9c8e65c30f22cfa6556f9431c35ec326a8088854 (patch)
tree7541d5c6e267f3aaeb0dfc0038a90a3083dfe75f
parent3e014341f8eb395bdb2b9d727dab4a095bc09e66 (diff)
downloadgcc-9c8e65c30f22cfa6556f9431c35ec326a8088854.zip
gcc-9c8e65c30f22cfa6556f9431c35ec326a8088854.tar.gz
gcc-9c8e65c30f22cfa6556f9431c35ec326a8088854.tar.bz2
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/finish_unit-test-1.c7
-rw-r--r--gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c28
-rw-r--r--gcc/testsuite/gcc.dg/plugin/plugin.exp1
-rw-r--r--gcc/toplev.c6
6 files changed, 50 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 532c925..43ea2b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-20 Olatunji Ruwase <tjruwase@google.com>
+
+ * toplev.c: Invoke FINISH_UNIT callbacks before call to
+ finalize().
+
2009-07-20 Shujing Zhao <pearly.zhao@oracle.com>
* Makefile.in (TREE_INLINE_H, tree-inline.o, cgraph.o): Remove
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b7ba7d4..5faeb99 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-20 Olatunji Ruwase <tjruwase@google.com>
+
+ * 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 <anemet@caviumnetworks.com>
* 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 0000000..4cd8a40
--- /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 0000000..634daee
--- /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 3122fa8..872a0ea 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 6fa3f1a..81d55f3 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. */