2017-05-16 Nathan Sidwell <nathan@acm.org>
* context.h (context::set_passes): New.
* context.c (context::context): Do not create pass manager.
* toplev.c (general_init): Create pass manager here.
===================================================================
@@ -29,14 +29,9 @@ along with GCC; see the file COPYING3.
gcc::context *g;
gcc::context::context ()
+ : m_passes (NULL), m_dumps (new gcc::dump_manager ())
{
have_offload = false;
-
- /* The pass manager's constructor uses the dump manager (to set up
- dumps for the various passes), so the dump manager must be set up
- before the pass manager. */
- m_dumps = new gcc::dump_manager ();
- m_passes = new gcc::pass_manager (this);
}
gcc::context::~context ()
===================================================================
@@ -39,6 +39,12 @@ public:
/* Pass-management. */
+ void set_passes (pass_manager *m)
+ {
+ gcc_assert (!m_passes);
+ m_passes = m;
+ }
+
pass_manager *get_passes () { gcc_assert (m_passes); return m_passes; }
/* Handling dump files. */
===================================================================
@@ -1154,9 +1154,13 @@ general_init (const char *argv0, bool in
processing. */
init_ggc_heuristics ();
- /* Create the singleton holder for global state.
- Doing so also creates the pass manager and with it the passes. */
+ /* Create the singleton holder for global state. This creates the
+ dump manager. */
g = new gcc::context ();
+
+ /* Create the passes. */
+ g->set_passes (new gcc::pass_manager (g));
+
symtab = new (ggc_cleared_alloc <symbol_table> ()) symbol_table ();
statistics_early_init ();